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

时间:2011-12-30 23:41:40

标签: maven maven-release-plugin maven-surefire-plugin

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

我试过了

-Dmaven.test.skip=true 

-DskipTests 

-DpreparationGoals=clean

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

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

7 个答案:

答案 0 :(得分:395)

-Darguments="-DskipTests"是您想要的,或者在pom中显式配置分叉执行。

答案 1 :(得分:39)

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

因此,您必须使用-Darguments,但要跳过仅使用skipTests的测试,以阻止他们编译使用maven.test.skip

答案 2 :(得分:21)

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

-Darguments="-DskipITs"

答案 3 :(得分:3)

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

  

-Dmaven.test.skip =真

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

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

或者您可以在

中的maven-surefire-plugin中定义skipTests
  

pom.xml

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

答案 4 :(得分:2)

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

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

例如:class ApiSiteMetricsTest < ActionController::TestCase tests Api::SiteMetricsController def test_1_index @controller.class.skip_before_action :verify_user,raise: false get "index", params:{ "format"=>"json", "site_metric_value"=>{ "site_metric_id"=>2403, "date_acquired"=>"2018-03-14T01:44:00+05:30", "site_id"=>3840, "lab_device_details"=>"", "comment"=>"", "sender_affiliation"=>"", "float_value"=>"" } } assert_response :success File.open("#{Rails.root}/del.html", "wb") { |f| f.write(@response.body) } #Do I have to do this o every test? #@controller.class.before_action :verify_user end ...

- 第二个是在构建中的pom.xml上执行这样的参数:

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

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

我建议您先在单个操作上准备发布,然后您可以编辑工作directorie上的release.properties文件,如果您的参数存在,则查看<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> 属性。它看起来像是:exec.additionalArguments

您可以执行发布。

答案 5 :(得分:0)

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

因此,只执行一个插件目标就足够了而不执行测试:

mvn release:perform

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

mvn clean package release:perform

答案 6 :(得分:0)

我通过简单地将 verify configuration 添加到 preparationGoals 来设法避免运行 clean 目标:

<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>