我只需要在执行时运行特定的 jUnit mvn release:prepare
。我不希望它在 mvn install 或任何其他目标下运行,因为这个 jUnit 旨在查看开发人员是否首先执行了数据库活动。
有没有办法让junit通过参数(?)知道正在执行的进程是release:prepare
?
或者,有没有办法在pom.xml中定义这个 jUnit 只在那个目标上运行?
我一直在对此进行一些搜索,但我似乎找不到解决方案,因为我目前还不太擅长 maven。任何帮助表示赞赏!
我只需要在执行时运行特定的 jUnit mvn release:prepare
。我不希望它在 mvn install 或任何其他目标下运行,因为这个 jUnit 旨在查看开发人员是否首先执行了数据库活动。
有没有办法让junit通过参数(?)知道正在执行的进程是release:prepare
?
或者,有没有办法在pom.xml中定义这个 jUnit 只在那个目标上运行?
我一直在对此进行一些搜索,但我似乎找不到解决方案,因为我目前还不太擅长 maven。任何帮助表示赞赏!
我没有完全按照您的要求完成,但关键是使用<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>
部分中排除该测试。
这里有一些相关信息
其他人很接近……但没有雪茄。
当 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
如果将执行添加到发布配置文件中,就会出现这种情况)