如何让Maven Release插件跳过测试?

48

我正在对Spotify的docker-client主分支进行mvn release:prepare -Darguments="-Dmaven.test.skip=true -DskipTests"操作,但无法让Maven的Release插件跳过测试。为什么Maven在这种情况下不遵守CLI标志?

我也很好奇是什么导致发布插件执行Surefire插件。 pom.xml中没有指定Surefire插件。

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
@EddúMeléndez 感谢您的提问。我使用的是3.2.5版本。我已经在问题描述中更新了版本信息。 - David Xia
1
而maven-release-plugin的版本呢? - Eddú Meléndez
@EddúMeléndez 2.5 在这里 https://github.com/spotify/docker-client/blob/master/pom.xml#L180 - David Xia
你能接受其中一个正确答案吗?总是让人困惑的是错误答案排在最前面。 - Christian Schneider
5个回答

138

这对我很有用。我想准备并执行发布。

mvn clean -DskipTests -Darguments=-DskipTests release:prepare release:perform

非常好用! - Vlad Mihalcea
16
-Darguments=-DskipTests就足够了,不需要第一个-DskipTests - Younes
3
OP的命令已经在“-Darguments”下有了“-DskipTests”,那么为什么它对他不起作用呢?事实上,我注意到一个项目也是这样。 - haridsv
2
这根本没有回答原问题,我真的很惊讶它仍然有这么多点赞。有关可能的根本原因,请参阅我的答案: https://dev59.com/z14b5IYBdhLWcg3wlSdq#61640653 - haridsv
可能所有的点赞者都像我一样,只是在寻找如何实现这个语法。它对我也起作用了(特别是Youne的评论 - 我们只需要在Darguments参数中添加双引号即可传递多个maven参数)。我没有和原帖作者遇到同样的问题,我只是需要知道如何跳过测试。 - Skystrider

5
我已经在我的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>

1
没有 -Dmaven.test.skipTests 这样的设置。它被称为 -DskipTests,仅跳过测试运行。在这种情况下,您还通过了 maven.test.skip,它完全跳过测试源代码的编译步骤,因此根本没有测试可供运行。简而言之:-Dmaven.test.skipTests=true -Dmaven.test.skip=true 可以替换为:-Dmaven.test.skip - BitfulByte
2
不完全一样,skipTests 编译测试但不运行它们,而 maven.test.skip=true 则连编译都跳过。 - Olgun Kaya

3
这是该问题在Google上的第一篇结果,但并没有最可能的解释和解决方案,所以这里是我的尝试。
我遇到了与原帖作者相同的问题,在运行release:prepare时通过-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 参数。 - Ilario

2
这适用于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>

-10

有两件事情。首先,如果您想运行一个发布版本,您需要运行mvn release:perform,这实际上是运行最终发布的步骤,而不是mvn release:prepare。如果您想在mvn release:prepare中跳过测试,您应该使用mvn -Dmaven.test.skip=true加上您定义的给定参数。

除此之外,maven-surefire-plugin在默认生命周期中被定义。


2
我运行了 mvn release:prepare -Dmaven.test.skip=true -Darguments="-Dmaven.test.skip=true -DskipTests",但它仍然运行了测试。 - David Xia
4
根据 https://jira.codehaus.org/browse/MRELEASE-700,命令为 mvn release:prepare arguments ='-Dmaven.test.skip=true',意思是在准备发布时跳过 Maven 测试。 - Ralph
它对我也不会跳过测试。 - Simon Jenkins
1
release:prepare 的其中一个功能是更新 POM 版本信息(并提交该版本)。因此,我不建议跳过 release:prepare 步骤。 - PatS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接