如何在不触发测试的情况下运行maven-release-plugin?
我试过了
-Dmaven.test.skip=true
和
-DskipTests
和
-DpreparationGoals=clean
......但没有人工作。
是的,我知道如果测试没有通过我不应该发布,但我无法控制让我的同事编写可靠的测试。
答案 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中定义skipTestspom.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)
你有太多不同的选择,以避免和跳过使用发布插件的测试
例如: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>