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

问题描述 投票:172回答:6

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

我试过了

-Dmaven.test.skip=true 

-DskipTests 

-DpreparationGoals=clean

......但没有工作。

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

maven maven-release-plugin maven-surefire-plugin
6个回答
396
投票

-Darguments="-DskipTests"是你想要的,或明确配置pom中的分叉执行。


40
投票

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

所以,你必须使用-Darguments,但跳过运行只使用skipTests的测试,以阻止他们编译使用maven.test.skip


21
投票

如果您只想跳过集成测试,可以这样做:

-Darguments="-DskipITs"

3
投票

要跳过整个单元测试,它使用参数

-Dmaven.test.skip =真

所以如果你想跳过单元测试,这将解决

mvn install -Dmaven.test.skip=true
mvn package -Dmaven.test.skip=true

或者您也可以在maven-surefire-plugin中定义skipTests

pom.hml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.12.4</version>
      <configuration>
         <skipTests>true</skipTests>
      </configuration>
</plugin>

2
投票

你有太多不同的选择,以避免和跳过使用发布插件的测试

  • 第一种是通过提供-Darguments将cli上的参数传递给发布目标或阶段:

例如: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>

请注意,第二种方法覆盖第一种方法。

我建议您先在单个操作上准备发布,然后您可以编辑工作directorie上的release.properties文件,如果您的参数存在,请查看exec.additionalArguments属性。它看起来像:exec.additionalArguments=-Dmaven.javadoc.skip\=true -Dmaven.test.skipTests\=true -Dmaven.test.skip\=true -P release-mode

您可以执行发布后。


0
投票

没有maven插件从字面上触发测试编译或执行。当这些插件具有特定阶段的目标时,触发一个或多个插件的执行的是maven生命周期阶段。

因此,只执行一个插件目标就足以执行测试:

mvn release:perform

或与项目构建和包装结合:

mvn clean package release:perform
© www.soinside.com 2019 - 2024. All rights reserved.