我该如何让maven-release-plugin跳过我的测试?

183

如何在不触发测试的情况下运行maven-release-plugin?

我尝试过:

-Dmaven.test.skip=true 

并且

-DskipTests 

并且

-DpreparationGoals=clean

...但是它们都没有奏效。

是的,我知道如果测试不通过就不应该发布,但我无法控制我的同事编写可靠的测试。

7个回答

413

-Darguments="-DskipTests" 是您需要的,或者在pom中明确配置分叉执行。


1
它对我有效,谢谢和+1,但是...为什么这是必要的? - javamonkey79
5
这句话的意思是:IT非常重要,因为发布流程会分叉出一个新的maven进程,而典型的“-DskipTests”参数不能作为系统属性传递。 - Eddie
4
希望我能给你点赞(vote you '2' up)。我花了好几个小时才弄明白这个问题……但有两个问题让我不太清楚:1. 我是否在文档中漏掉了什么或者是mvn的文档漏掉了一些信息?2. 我在公司POM中设置了<skipTests>true</skipTests>,但还是没用。最后有效的是你提供的解决方案。 - Pulak Agrawal
你需要在pom中进行一些特定的配置才能使其工作吗? - DenCowboy

42

-Darguments="..." 参数传递给分叉的maven进程,但是需要注意这里使用了两个不同的开关。 -DskipTests 强制maven不运行任何测试,但测试仍然被编译(如果您有任何对test-jar类型的依赖关系,则这很重要)。 -Dmaven.test.skip=true 强制maven甚至不编译测试,这意味着任何test-jars都将不会生成。

因此,您必须使用-Darguments,但要跳过测试,请仅使用skipTests,要停止编译测试,请使用maven.test.skip


21

如果你只想跳过集成测试,可以使用以下方法:

-Darguments="-DskipITs"

4

您有两种不同的选择来避免和跳过使用发布插件进行测试:

  • 第一种方法是通过在命令行界面上传递参数到发布目标或阶段,提供一个-Darguments:

例如:mvn -X -Darguments="-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true" -P release-mode release:prepare

-第二种方法是在构建中执行这些参数,像这样在您的 pom.xml 中编写:

<plugin>    
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.scm</groupId>
                        <artifactId>maven-scm-provider-gitexe</artifactId>
                        <version>1.9.4</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <skip>true</skip>
                    <skipTests>true</skipTests>
                    <preparationGoals>clean validate</preparationGoals>
                    <arguments>-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true</arguments>
                    <useReleaseProfile>false</useReleaseProfile>
                    <releaseProfiles>release-mode</releaseProfiles>
                    <tagNameFormat>TEST-@{project.version}</tagNameFormat>
                </configuration>
            </plugin>

请注意,第二种方法会覆盖第一种方法。
我建议你先在单个操作中准备发布,然后在工作目录中编辑release.properties文件,并查看exec.additionalArguments属性,以确定你的参数是否存在。它将类似于:exec.additionalArguments=-Dmaven.javadoc.skip\=true -Dmaven.test.skipTests\=true -Dmaven.test.skip\=true -P release-mode。
之后,您可以执行发布操作。

1

我通过将configurationpreparationGoals添加到clean中,成功避免了运行verify目标:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-release-plugin</artifactId>
  <version>2.5.3</version>
  <configuration>
    <preparationGoals>clean</preparationGoals> <!-- See here -->
  </configuration>
</plugin>

0

使用以下参数跳过测试

-Darguments="-DskipTests"

或者

默认情况下进行跳过

 [...]
  <properties>
    <skipTests>true</skipTests>
  </properties>
  [...]

2
这个问题特别涉及Maven发布插件,因此不会使用那些Maven目标。 - Jaap

0
当您使用gitflow-maven-plugin跳过测试时,在配置属性中使用skipTestProject : true(默认值为false)。在文档中有详细描述:https://aleksandr-m.github.io/gitflow-maven-plugin/release-finish-mojo.html 示例:
    <plugin>
        <groupId>com.amashchenko.maven.plugin</groupId>
        <artifactId>gitflow-maven-plugin</artifactId>
        <version>${gitflow.plugin.version}</version>
        <configuration>
            <skipTestProject>true</skipTestProject>
        </configuration>
    </plugin>

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