如何使 Maven 发布插件跳过测试?
Posted
技术标签:
【中文标题】如何使 Maven 发布插件跳过测试?【英文标题】:how to make maven release plugin skip tests? 【发布时间】:2015-03-09 17:21:54 【问题描述】:我在Spotify's docker-client 的主结帐时运行mvn release:prepare -Darguments="-Dmaven.test.skip=true -DskipTests"
。但我无法让 maven 的发布插件跳过测试。为什么在这种情况下 maven 不尊重 CLI 标志?
我也很好奇是什么导致发布插件执行了surefire-plugin。 pom.xml
中没有指定surefire-plugin。
mvn --version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T12:29:23-05:00)
Maven home: /usr/local/Cellar/maven/3.2.5/libexec
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"
【问题讨论】:
您使用的是哪个版本的 maven-release?确保您使用的是 2.5.1 @EddúMeléndez 感谢您的提问。我在 3.2.5。我已经用上面的版本信息更新了我的问题。 还有 maven-release-plugin 版本? @EddúMeléndez 2.5 这里github.com/spotify/docker-client/blob/master/pom.xml#L180 您能接受其中一个正确答案吗?错误的答案在最上面总是令人困惑。 【参考方案1】:这对我有用。我想准备和执行发布。
mvn clean -DskipTests -Darguments=-DskipTests release:prepare release:perform
【讨论】:
像魅力一样工作!-Darguments=-DskipTests
就足够了。不需要第一个-DskipTests
。
OP 的命令在-Darguments
下已经有-DskipTests
那么为什么它对他不起作用呢?事实上,我在一个项目中也注意到了同样的事情。
这根本没有回答原来的问题,我真的很惊讶它仍然得到了这么多的赞成票。有关可能的根本原因,请参阅我的回答:***.com/a/61640653/95750【参考方案2】:
我在 pom.xml 中使用了以下内容
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<tagNameFormat>v@project.version</tagNameFormat>
<arguments>-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true</arguments>
</configuration>
</plugin>
【讨论】:
没有-Dmaven.test.skipTests这样的设置。它被称为 -DskipTests,它只是跳过运行测试。在这种情况下,您还通过了 maven.test.skip,它一起跳过了测试源的编译步骤,因此无论如何都没有要运行的测试。 TL;DR:-Dmaven.test.skipTests=true -Dmaven.test.skip=true
可以替换为:-Dmaven.test.skip
并非如此,skipTests 编译测试但不运行它们,而 maven.test.skip=true 甚至跳过编译。【参考方案3】:
这是 google 中针对此问题的第一次点击,但没有最可能的解释和解决方案,所以这是我的尝试。
我在运行 release:prepare
时遇到了与 OP 相同的问题,而通过 -Darguments
传入的 -DskipTests
未被识别。深入研究后,我注意到一个祖父 POM(父级的父级)具有以下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.2</version>
<configuration>
<arguments>-B</arguments>
</configuration>
</plugin>
它实际上有更多配置,但我只显示与此问题最相关的配置,即<arguments>-B</arguments>
。这是将arguments
配置参数硬编码为-B
,而不是让它读取arguments
属性。为了解决问题,我在项目 pom 中添加了以下内容并开始工作:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<arguments>$(arguments)</arguments>
</configuration>
</plugin>
【讨论】:
感谢分享。我遇到了同样的问题,POM 中的硬编码参数覆盖了 CLI 参数【参考方案4】:这适用于 Maven 3.6(可能还有一些早期版本)。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<arguments>-DskipTests</arguments>
</configuration>
</plugin>
【讨论】:
【参考方案5】:有两件事。首先,如果您想运行一个版本,您需要运行mvn release:perform
,它真正运行最终版本的步骤,而不是mvn release:prepare
。如果你想跳过mvn release:prepare
中的测试,你应该使用mvn -Dmaven.test.skip=true
加上你定义的给定参数。
除了在default life cylce中定义的maven-surefire-plugin
【讨论】:
我运行了mvn release:prepare -Dmaven.test.skip=true -Darguments="-Dmaven.test.skip=true -DskipTests"
,它仍然运行了测试。
@khmarbaise:根据jira.codehaus.org/browse/MRELEASE-700,是mvn release:prepare arguments='-Dmaven.test.skip=true'
它也不会为我跳过测试
release:prepare
所做的一件事是更新 POM 版本信息(并提交该版本)。因此,我不建议跳过 release:prepare
步骤。以上是关于如何使 Maven 发布插件跳过测试?的主要内容,如果未能解决你的问题,请参考以下文章