我需要在执行mvn release:prepare
时只运行特定的jUnit。我不希望它在mvn install或任何其他目标下运行,因为这个jUnit旨在查看开发人员是否首先执行了数据库活动。
有没有办法让junit通过参数(?)知道正在执行的进程是release:prepare
?
或者,有没有办法在 pom.xml 中定义这个jUnit只运行在那个目标上?
我一直在搜索这个问题,我似乎无法找到解决方案,因为我还没有那么擅长maven。任何帮助表示赞赏!
答案 0 :(得分:1)
我还没有完全按照您的要求完成,但关键是使用SureFire下的<executions>
部分:
<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>
部分中排除该测试。
有一些相关信息HERE
答案 1 :(得分: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
步骤将无法验证build可以在发布配置文件处于活动状态时使用,您可以使后续的release:perform
失败。
注意:一个不太复杂的路径就是将surefire配置放入您正在使用的版本配置文件中(默认情况下,其ID为release
,但由于您可以更改错误,因此更容易出错父pom - 例如,如果您决定将项目推送到中心,则sonatype-oss-parent将发布配置文件更改为sonatype-release
- 然后您将看不到构建失败,因为测试将不会执行直到您更改您的pom以匹配新发布配置文件的ID ...使用-P+release-preflight-checks
确保该个人资料始终为release:prepare
有效,并且还可以满足请求者完全的原始要求 - 即只运行release:prepare
而不运行release:perform
,如果执行被添加到发布配置文件中就是这种情况)