如何使 Maven 发布插件跳过测试?
how to make maven release plugin skip tests?
我 运行 mvn release:prepare -Darguments="-Dmaven.test.skip=true -DskipTests"
在 Spotify's docker-client 的主结帐中。但是我无法让 Maven 的发布插件跳过测试。为什么 Maven 在这种情况下不尊重 CLI 标志?
我也很好奇release插件执行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"
有两件事。首先,如果您想 运行 发布,您需要 运行 mvn release:perform
这实际上是 运行 最终发布的步骤,而不是 mvn release:prepare
。如果您想跳过 mvn release:prepare
中的测试,您应该使用 mvn -Dmaven.test.skip=true
加上您定义的给定参数。
中定义的 maven-surefire-plugin
这对我有用。我既要准备发布又要执行发布。
mvn clean -DskipTests -Darguments=-DskipTests release:prepare release:perform
我在 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>
这适用于 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>
这是 google 中针对此问题的首批点击之一,但没有最可能的解释和解决方案,所以这是我的尝试。
我遇到了与 运行 release:prepare
中的 OP 相同的问题,通过 -Darguments
传入的 -DskipTests
未被识别。深入研究后,我注意到 grandparent POM(parent 的 parent)具有以下配置:
<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>
我 运行 mvn release:prepare -Darguments="-Dmaven.test.skip=true -DskipTests"
在 Spotify's docker-client 的主结帐中。但是我无法让 Maven 的发布插件跳过测试。为什么 Maven 在这种情况下不尊重 CLI 标志?
我也很好奇release插件执行surefire-plugin的原因是什么。 pom.xml
.
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"
有两件事。首先,如果您想 运行 发布,您需要 运行 mvn release:perform
这实际上是 运行 最终发布的步骤,而不是 mvn release:prepare
。如果您想跳过 mvn release:prepare
中的测试,您应该使用 mvn -Dmaven.test.skip=true
加上您定义的给定参数。
这对我有用。我既要准备发布又要执行发布。
mvn clean -DskipTests -Darguments=-DskipTests release:prepare release:perform
我在 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>
这适用于 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>
这是 google 中针对此问题的首批点击之一,但没有最可能的解释和解决方案,所以这是我的尝试。
我遇到了与 运行 release:prepare
中的 OP 相同的问题,通过 -Darguments
传入的 -DskipTests
未被识别。深入研究后,我注意到 grandparent POM(parent 的 parent)具有以下配置:
<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>