1

我只需要在执行时运行特定的 jUnit mvn release:prepare。我不希望它在 mvn install 或任何其他目标下运行,因为这个 jUnit 旨在查看开发人员是否首先执行了数据库活动。

有没有办法让junit通过参数(?)知道正在执行的进程是release:prepare

或者,有没有办法在pom.xml中定义这个 jUnit 只在那个目标上运行?

我一直在对此进行一些搜索,但我似乎找不到解决方案,因为我目前还不太擅长 maven。任何帮助表示赞赏!

4

2 回答 2

1

我没有完全按照您的要求完成,但关键是使用<executions>SureFire 下的部分:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      ... exclude the test from normal execution ...
    </configuration>
    <executions>
      <execution>
        <id>release-phase</id>
        <phase>release-prepare</phase>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          ... fill this in to include the tests you want ...
        </configuration>
      </execution>
    </executions>
 <plugin>

您还需要在正常<configuration>部分中排除该测试。

这里有一些相关信息

于 2013-08-14T16:32:54.453 回答
1

其他人很接近……但没有雪茄。

当 Maven 运行发布时,发布过程没有特殊的阶段。您要做的是添加配置为包含您想要的测试的配置文件,例如

<profiles>
  <profile>
    <id>release-preflight-checks</id>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <executions>
            <execution>
              <id>release-preflight-checks</id>
              <goals>
                <goal>test</goal>
              </goals>
              <configuration>
                .. include your test here
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

然后你需要默认配置surefire不执行你的预检检查

<build>
  <plugins>
    ...
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        .. exclude your test here
      </configuration>
    </plugin>
    ...
  </plugins>
</build>

最后,你需要告诉 Maven 这个配置文件应该只在release:prepare' 分叉执行期间是活动的

<build>
  <plugins>
    ...
    <plugin>
      <artifactId>maven-release-plugin</artifactId>
      <configuration>
        ...
        <preparationGoals>clean verify -P+release-preflight-checks</preparationGoals>
        ...
      </configuration>
    </plugin>
    ...
  </plugins>
</build>

+注意:在配置文件名称前面放置非常重要,这样您就可以将配置文件添加到活动配置文件列表中,否则您的release:prepare步骤将不会验证构建是否与发布配置文件活动一起工作,您可以有一个后续release:perform失败。

注意:一个不太复杂的方法是将surefire配置放入您正在使用的发布配置文件中(默认情况下,它的id为release但更容易出错,因为您可以通过父pom更改它 - 例如,如果您决定要将您的项目推送到中央,sonatype-oss-parent 将发布配置文件更改为sonatype-release- 然后您不会看到构建失败,因为在您更改 pom 以匹配新的发布配置文件的 id 之前不会执行测试。 .. 使用-P+release-preflight-checks确保配置文件始终处于活动状态,release:prepare并且还具有完全满足请求者原始要求的好处 - 即仅运行release:prepare而不运行release:perform如果将执行添加到发布配置文件中,就会出现这种情况)

于 2013-08-15T08:59:19.960 回答