我正在使用surefire插件对项目进行测试,然后需要使用“站点”目标生成报告,即使测试失败也是如此。
问题是默认情况下,在测试失败的情况下,surefire会强制构建失败,并且不会执行其他目标。 所以我将以下配置设置为surefire:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
这很有效并且“网站”目标始终执行,但在这种情况下,构建的状态始终为“成功”,因此我无法设置电子邮件通知。
是否有正确的方法在“测试”目标之后执行下一个目标而不忽略surefire插件中的失败?
答案 0 :(得分:2)
您可以使用:
-DskipTests=true
完全跳过测试执行-Dmaven.test.failure.ignore=true
忽略测试失败--fail-at-end
让构建在测试阶段后继续,并且只在整个构建周期完成时失败(如果有测试失败)鉴于此声明......
这很有效并且“网站”目标始终执行,但在这种情况下,构建的状态始终为“成功”,因此我无法设置电子邮件通知。
......我想你想使用--fail-at-end
。根据文档,它的行为是:
- fail-at-end - 如果某个特定模块构建失败,请继续反应堆的其余部分并在最后报告所有失败的模块
答案 1 :(得分:0)
我正在使用surefire插件对项目运行测试,然后需要使用&#34; site&#34;生成报告。目标,即使测试失败。
如果我理解你的问题,你所做的就等同于简单地运行mvn site
(或mvn site:stage
)目标!它将在运行测试后生成站点,并且(如果已配置)包括哪个报告失败,哪个报告失败。它不会失败,因为你没有要求测试项目&#39;但要用测试结果构建项目的网站&#39;它成功了。
......构建的状态始终是&#34;成功&#34;这样我就无法设置电子邮件通知。
根据您的描述,我假设发送通知基于构建状态,并且通知具有指向生成的站点的链接。如果是这种情况,我可以想到有3个选项可以给你你想要的东西:
${basedir}/target/surefire-reports
中)而不是构建状态触发的通知。然后,您只需运行mvn site
mvn test
mvn site test
将首先生成站点(运行测试并忽略构建报告的失败),然后再次运行测试以使构建失败