如何在pom.xml中配置Maven的--fail-never及失败测试重跑?
解决Maven Profile配置测试重跑+全局不停止构建的问题
首先明确两个核心点:
--fail-never(简写-fn)是Maven核心的命令行全局参数,不属于测试插件的JVM参数,因此不能放到<argLine>中。- 测试自动重跑的配置可以直接通过
maven-failsafe-plugin的参数完成,不需要通过argLine传递系统属性。
1. 在Profile中配置测试自动重跑
将重跑失败测试的逻辑直接配置到maven-failsafe-plugin里,这是更规范的做法:
<profile> <id>test-continue-rerun</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <!-- 选用与Maven 3.6兼容的版本,比如3.0.0-M5及以上 --> <version>3.0.0-M5</version> <configuration> <!-- 设置失败测试的重跑次数 --> <rerunFailingTestsCount>2</rerunFailingTestsCount> <!-- 可选:如果希望测试失败时插件不立即终止执行,打开下面的配置 --> <!-- <failOnError>false</failOnError> --> </configuration> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile>
2. 实现-fn(全局不停止+最终构建成功)的效果
因为-fn是Maven核心参数,无法直接写到pom.xml中,有两种可行方案:
方案一:激活Profile时携带命令行参数
执行构建时,在命令行激活Profile并加上-fn,既用Profile配置了重跑,又保留了全局不停止的特性:
mvn clean verify -Ptest-continue-rerun -fn
方案二:仅针对测试插件控制失败行为
如果你只需要测试环节失败不影响构建,而不关心其他插件的失败情况,可以在插件配置中添加以下参数:
<configuration> <!-- ... 已有重跑配置 ... --> <!-- 测试失败时,插件不抛出错误终止构建 --> <failOnError>false</failOnError> <!-- 即使没有测试用例执行,也不标记构建失败 --> <failIfNoTests>false</failIfNoTests> </configuration>
注意:这种方式只能控制测试插件的行为,无法覆盖编译、打包等其他环节的失败,而-fn是全局生效的。
内容的提问来源于stack exchange,提问作者matandked
相关产品推荐
相关产品推荐

