如何使用maven构建一个jar,忽略测试结果? [复制]

Posted

技术标签:

【中文标题】如何使用maven构建一个jar,忽略测试结果? [复制]【英文标题】:How to build a jar using maven, ignoring test results? [duplicate] 【发布时间】:2011-03-22 21:18:48 【问题描述】:

实际上,当我运行测试时它们会失败,但我需要运行它们以获取一些对我的 jar 非常重要的 .class 文件。

默认情况下,当测试结果失败时,jar 是不构建的,我可以在 pom.xml 中添加一个忽略它的设置,所以我可以构建忽略测试结果的 jar 吗?

我读过一些关于“Maven Surefire 插件”的文章,但我不知道如何使用它...

【问题讨论】:

这个问题询问是否继续打包当前的 Maven 项目/模块,即使测试失败。因此它不是***.com/questions/4174696/… 的重复,因为那是关于在多模块反应器构建中继续构建其他模块。虽然可能的答案有一些重叠,但上下文完全不同。 【参考方案1】:

详情请参考surefire:test,但最有用的属性是:

-Dmaven.test.failure.ignore=true(或 -DtestFailureIgnore=true) - 将忽略测试执行期间发生的任何故障

-Dmaven.test.error.ignore=true(已弃用)- 将忽略测试执行期间发生的任何错误

-DskipTests - 将编译测试类但完全跳过测试执行

-Dmaven.test.skip=true - 甚至不会编译测试

我相信在您希望编译测试类但不会由于任何测试错误而导致构建失败并且仍然创建 jar 的情况下。

您应该使用第一个选项来忽略任何测试失败,一旦构建完成,您仍然可以查看这些失败。

【讨论】:

有人知道为什么不再使用“-Dmaven.test.error.ignore=true”了吗?我发现在某些情况下不需要忽略实际失败,而是忽略错误(这实际上可能不会导致测试“失败”)。现在有什么办法可以区分这两者吗? 您可以使用较旧的 maven surefire 插件版本来实现此目的 当我使用 -DtestFailureIgnore=true 时构建失败,而 -DtestFailureIgnore=true 有效。我使用 maven-3.2.1 @divideByZero 复制粘贴太多,你只是写了两次相同的东西。那么它(不)以哪种方式工作? @Kingsly 在maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html 中指定,testFailureIgnore 是用户属性,我相信您可以将其设置在您的pom.xml 中。一般来说,他们都应该做同样的事情。而且重要的不是您的maven 版本,而是 plugin 版本【参考方案2】:

mvn -Dmaven.test.skip=true package 跳过万无一失的测试魔咒。

要忽略测试失败并阻止 maven 停止,您可以将其添加到 pom.xml 的部分:

 <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
     <testFailureIgnore>true</testFailureIgnore>
   </configuration>
 </plugin>

【讨论】:

非常感谢您的帖子,我添加了该部分并且它起作用了,无论如何,我的问题没有解决,因为现在运行测试后产生的 .class 文件丢失了......而且我需要那些……不知何故……即使测试结果失败 我在关于surefire插件配置的答案中添加了一个新部分,用于忽略测试失败......希望有所帮助...... mvn -Dmaven.test.skip=true package skips the testing phase不,它没有!。您不能使用系统属性跳过某个阶段。它所做的是设置一个标志,跳过执行 surefire:test mojo 和 compiler:test-compile mojo (可能还有其他):maven.apache.org/plugins/maven-surefire-plugin/…maven.apache.org/plugins/maven-compiler-plugin/… 这不是吹毛求疵,这是正确的。无论如何,所有这些建议跳过测试的答案都是不正确的,他们没有抓住重点:问题不在于跳过测试,而在于忽略测试失败。【参考方案3】:

解决办法是:

mvn -fn clean install

执行mvn --help 以获得高级选项

这是 -fn 的摘录

 -fn,--fail-never         NEVER fail the build, regardless
                          of project result

【讨论】:

这不是最好的解决方案,因为它将停止构建失败的项目,这意味着在测试执行(包、安装、部署等)之后设置的任何目标都不会执行对于那个项目。因此“完整构建”将运行到最后,但该项目不会安装到 repo 并且将使用之前版本的 jar,它被定义为依赖项 @Zilvinas 那么什么最好的解决方案? 请看下面的答案:***.com/a/16690564/344477【参考方案4】:
<properties>
<maven.test.skip>true</maven.test.skip>
<maven.test.failure.ignore>true</maven.test.failure.ignore>
</properties>

http://jira.codehaus.org/browse/SUREFIRE-319

或者从命令行

http://maven.apache.org/maven-1.x/plugins/test/properties.html

maven.test.error.ignore 是 设置 这为 true 以忽略期间的错误 测试。不推荐使用它, 但有时很方便

【讨论】:

非常感谢您的帖子,我添加了该部分并且它起作用了,无论如何,我的问题没有解决,因为现在运行测试后产生的 .class 文件丢失了......而且我需要那些……不知何故……即使测试结果失败 对不起,我错了,删除“true”部分我得到了正确的结果 对我来说, -Dmaven.test.failure.ignore=true 似乎可以在命令行中工作,但 -Dmaven.test.error.ignore=true 什么都不做。 @rogerdpack:某些测试框架中的失败和错误是不同的;从您的消息来看,我猜您遇到的是失败而不是错误。 我不建议在 pom.xml 中设置这个属性,而是只在真正需要时直接从命令行添加它来运行它【参考方案5】:

使用 -DskipTests=true 而不是 -Dmaven.test.skip=true 以跳过测试但编译它们。

使用 -Dmaven.test.failure.ignore=true 也可以,但不是很好。

【讨论】:

如果test-jar类型,从测试类生成的被用作其他模块的依赖,如果我们使用'-Dmaven.test.skip=true',整个编译将失败。虽然 -DskipTests=true 编译并生成 jar 但不运行测试。 :)【参考方案6】:

使用 maven 选项 -Dmaven.test.skip=true

例如 mvn package -Dmaven.test.skip=true

【讨论】:

非常感谢您的帖子,我添加了该部分并且它起作用了,无论如何,我的问题没有解决,因为现在运行测试后产生的 .class 文件丢失了......而且我需要那些……不知何故……即使测试结果失败 这将跳过测试,问题更多是关于忽略失败。

以上是关于如何使用maven构建一个jar,忽略测试结果? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何运行构建后生成的maven项目的jar文件?

运行使用 maven 构建的 jar 时的 FlinkMLTools NoClassDef

如何使用eclipse maven构建hbase开发环境

Maven 常见知识点整理

如何在 maven jar 构建过程中包含外部 jar?

maven编译时如何忽略单元测试