无需测试的Maven软件包/安装(跳过测试)


342

我正在尝试打包我的项目。但是,它会自动运行以前执行打包的测试。测试将一些内容插入数据库。这不是我想要的,我需要避免在打包应用程序时运行测试。有人知道如何在没有测试的情况下运行软件包吗?


13
单元测试应包括以下四个阶段:初始化,测试,验证和拆卸。也许您应该调整测试并根据需要对数据库进行拆解/清理,或者应该使用未随jar文件打包的单独数据库实例来运行测试。
Marc-Christian Schulze

看来您的测试“繁重”,所以您不想执行它们。但这是一个坏习惯。也许某些DBUnit框架可以为您提供帮助?或者您可以在测试结束时还原数据库更改?
Mickael Marrache

Answers:


571

与运行Maven

mvn package -Dmaven.test.skip=true 

1
感谢您的即时答复,我是从eclipse运行的,我在其中添加命令-Dmaven.test.skip = true?
vks 2011年

10
我从未从eclipse启动mvn,但是在“运行配置”窗口中配置maven的目标和配置文件时,有一个“跳过测试”复选框。也许那可以解决问题。
Giorgos Dimtsas 2011年

9
根据将跳过编译和执行的文档。您可以使用-DskipTests来跳过执行。 这篇文章还提供了一些警告,说明可以与每个标志一起使用的版本
JonnyRaa 2014年

1
非常感谢,我曾经使用过它,-DskipTests但是现在不起作用了,为什么?
2016年

7
请注意,Maven Surefire插件Maven故障安全插件文档建议设置skipTests优先于setting maven.test.skip
FilipBártek16年

171

只需提供以下提到的命令即可忽略执行测试用例,

mvn package -DskipTests

4
对我来说这是行不通的。我不得不改用公认的解决方案
-Sebas

1
-DskipTests我使用时对我不起作用mvn clean install -DskipTests
Vishrant

1
它部分正常,因为它不会执行测试,但会编译测试类..
安东尼

对于关注者,-DskipTests-Dmaven.test.skip.exec=true stackoverflow.com/a/21933970/32453相同,是的,它确实编译了测试并且没有运行它们(而-Dmaven.test.skip=true没有编译它们)
rogerdpack

47

如果您不想设置命令行arg,则可以将此插件配置添加到pom中:

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

3
您不能再使用此配置从命令行运行测试。
伊曼纽尔·布尔格

1
@EmmanuelBourg可由以下方向在本例中被补救maven.apache.org/plugins/maven-surefire-plugin/examples/...
smp7d


41

请注意,-Dmaven.test.skip阻止Maven构建测试罐工件。

如果您想跳过测试,但按照常规构建创建工件,请使用:

-Dmaven.test.skip.exec

1
这是我一直在寻找的解决方案,效果很好。谢谢。
Binita Bharati '18

我该怎么想起那件事?为什么不做一个简单的,显而易见的,令人难忘的别名,例如“ skipTests”?
TheRealChx101

32

如果您在Windows Powershell中尝试此操作,则会出现以下错误:

[ERROR] Unknown lifecycle phase ".test.skip=true". You must specify a valid lifecycle phase or a goal in the format...

原因是在Powershell中,“ -”具有特殊含义,并且会引起Maven问题。

解决的办法是在它前面加上一个反引号(`),如下所示。

mvn `-Dmaven.test.skip=true install 

参考:http : //kuniganotas.wordpress.com/2011/08/12/invalid-task-test-skiptrue-you-must-specify-a-valid-lifecycle-phase/


1
我有同样的问题,这为我解决了。谢谢。
nsof

26
<properties>
    <maven.test.skip>true</maven.test.skip>
</properties>

也是添加pom文件的方法


18

您可以将该maven.test.skip标志作为JVM参数传递,以在运行软件包阶段(以及默认生命周期中的先前阶段)时跳过正在运行的测试:

mvn package -Dmaven.test.skip=true

您也可以将skipTests标志单独传递给mvn可执行文件。如果要将这些信息包括在POM中,则可以创建一个新的配置文件,在其中可以配置maven-surefire-plugin跳过测试




11

在这里回答一个古老的公认问题。如果要避免一直传递命令行参数,可以在pom.xml中添加它:

  <properties>
    <skipTests>true</skipTests>
  </properties>

10

您可以在任一命令中添加-DskipTests或跳过测试。您的情况如下所示:-Dmaven.test.skip=truemvn

mvn package -DskipTests

要么

mvn package -Dmaven.test.skip=true

4

测试应始终在打包之前运行[1]。如果您需要关闭测试,则说明您做错了。换句话说,您正在尝试解决错误的问题。找出您的真正问题所在,然后提出该问题。听起来好像与数据库有关。

[1]当需要快速生成供本地开发使用的工件时,您可以跳过测试,但是通常,创建工件应始终遵循成功的测试运行。


我有一个类似的问题:我的应用程序包含websocket。当我运行mvn clean install时,我将经历无尽的测试系列。在我强制关闭它之前,该过程已经进行了3个小时,并且所打印的消息只是关于Websocket的。您能检查一下我的问题,看看我做错了什么吗?stackoverflow.com/questions/54614739/…–
georB

规则总是有例外。如果您不这样认为,那就错了。
杰伊·沙利文



2

对于不感染Maven测试的Maven软件包:

<properties>
    <maven.test.failure.ignore>true</maven.test.failure.ignore>
</properties>

谢谢,我今天确实需要这个。
肖恩·麦克米兰

1

显然,您做错了方法。测试是预包装的重要组成部分。您不应忽略或跳过它,而应以正确的方式来做。尝试更改要向其插入数据的数据库(例如test_db)。可能需要一段时间才能进行设置。为了确保可以永久使用该数据库,您应该在测试结束之前删除所有数据。JUnit4具有批注,使您轻松自如。为正确的方法使用@ Before,@ After @Test批注。您需要花一些时间,但这是值得的!


9
我认为这个问题以及在不运行测试的情况下进行打包的愿望是完全正确的。我不认为OP“显然是在用错误的方式”。不同的人和项目有不同的需求,这些需求通常与Maven圣经不一致,或者与各种人(例如您自己)对软件开发应如何工作的信念不一致。我认为,如果不采用居高临下的方法,您的回答将受到更多的赞赏。
Zero3,2015年

1

在Intellij中,转到“视图”->“工具窗口”->“选择Maven项目”。在Lifecyle下拉菜单上,右键单击package->选择Create'your-project [package]'...

package -Dmaven.test.skip=true -f pom.xml在命令行字段中输入以下值:单击“应用”,“运行配置”下拉菜单应与您创建的自定义maven命令一起出现。


为什么这被否决?每当我想构建项目但都跳过测试时,都会使用它
Patrick Tolentino



-1

最好和最简单的方法是在“ Maven项目”窗口中的IntelliJ Idea中,而不必单击测试按钮。希望对您有帮助。祝你有美好的一天 :)


1
如果单击包,它将运行测试,这是OP试图避免的测试
Charlie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.