Maven跳过测试

我使用Maven 2.2.1和构建我的项目,我使用这个命令

mvn clean install -Dmaven.test.skip=true

然而,构建失败了,它无法找到其中一个工件。然而,当我使用:

mvn clean install -DskipTests

一切都很顺利。

到目前为止,我一直认为这两个命令是等价的。然而,这个链接似乎暗示-Dmaven.test.skip=true也跳过了编译测试用例。

然而,这仍然没有向我解释为什么一个命令是有效的,而另一个没有。如果有人能给我解释一下,我将不胜感激。

541209 次浏览

我可以给你一个同样问题的例子,但它可能不能给你问题的答案。(此外,在本例中,我使用的是我的Maven 3知识,这可能不适用于Maven 2。)

在一个多模块的maven项目中(包含模块AB,其中B依赖于A),你也可以在B中添加A测试的依赖

B中的这个依赖关系可能如下所示:

<dependency>
<groupId>com.foo</groupId>
<artifactId>A</artifactId>
<classifier>tests</classifier>
<type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 3. -->
<scope>test</scope>
</dependency>

(更多信息请参考https://maven.apache.org/guides/mini/guide-attached-tests.html)

请注意,项目__abc0通常会生成带有分类器tests(即.../com/foo/A/<version>/A-<version>-tests.jar)的辅助工件,其中包含测试类和测试资源。

如果你用-Dmaven.test.skip=true构建项目A,你将在构建B时得到一个依赖项解析错误,除非在你的本地回购或远程存储库中找到A测试工件。原因是A的测试类既没有编译,也没有生成Atests工件。

然而,如果你用-DskipTests构建A,它的tests工件将被生成(尽管测试不会运行),并且B中的依赖将被成功解决。

正如你所注意到的,-Dmaven.test.skip=true跳过了编译测试。更重要的是,它跳过了构建测试工件。大型项目的一种常见做法是在同一个项目中的模块之间共享测试实用程序和基类。

这是通过让一个模块需要先前构建的模块的test-jar来实现的:

<dependency>
<groupId>org.myproject.mygroup</groupId>
<artifactId>common</artifactId>
<version>1.0</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>

如果指定了-Dmaven.test.skip=true(或简单的-Dmaven.test.skip),则不会构建__abc2,并且任何依赖于它们的模块都将构建失败。

相反,当你使用-DskipTests时,Maven不会运行测试,但它会编译它们并构建test-jar,使其可用于后续模块。

为了构建包,我与测试有一些相互依赖性。

为了完成目标,下面的命令可以覆盖对测试工件的需求:

mvn -DskipTests=true  package

你也可以使用下面的命令:-

mvn clean install -Dmaven.test.skip=true

在maven编译期间,您可以通过在pom.xml中添加以下插件来跳过测试执行

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

要在maven清洁安装期间跳过测试用例,我在以下命令中使用了-DskipTests参数

mvn clean install -DskipTests

进入终端窗口

参数-DskipTests可能不起作用,具体取决于您的surefire-plugin版本。

你可以使用“- dmarvin .test.skip”。而不是"-DskipTests"

来源:Surefire参数说明

每个参数之间都有区别。

  • -DskipTests跳过运行测试阶段,这意味着在这个过程结束时,你将编译你的测试。

  • -Dmaven.test.skip=true跳过编译和运行测试阶段。

由于参数-Dmaven.test.skip=true跳过编译,您没有测试工件。

有关更多信息,请阅读surfire文档:http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html

我为Intellij用户提供了另一种方法,它对我来说非常有效:

  1. 点击“跳过测试”;按钮

enter image description here

  1. 按住&;CTRL"按钮
  2. 选择“clean"和“;install"

enter image description here

  1. 点击“Run"maven面板上的按钮

enter image description here

我使用以下代码跳过编译和运行测试(maven 3.8.1):

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

使用Maven的最新版本

给出命令位变化的方式。

下面的命令将工作得很好

mvn clean install "-Dmaven.test.skip=true"

要获得最快的构建,请跳过编译测试文件和运行测试:

mvn install -Dmaven.test.skip -DskipTests

Maven Surefire插件文档:

您还可以通过执行以下命令通过命令行跳过测试:

mvn install -DskipTests

如果必须,也可以使用maven.test.skip属性跳过编译测试。maven.test.skip是由Surefire, Failsafe和编译器插件。

mvn install -Dmaven.test.skip=true

更多加速安装的方法可以在这个答案找到问题“__abc1”。