Maven跳过测试

时间:2014-07-13 22:39:02

标签: maven

我正在使用Maven 2.2.1并构建我使用此命令的项目

mvn clean install -Dmaven.test.skip=true

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

mvn clean install -DskipTests
一切顺利。

到目前为止,我一直认为这两个命令是等价的。但是,this link似乎表明-Dmaven.test.skip=true也会跳过编译测试用例。

然而,这仍然没有向我解释为什么一个命令正在工作而另一个命令不起作用。如果有人请向我解释,请感谢。

9 个答案:

答案 0 :(得分:80)

如您所述,-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),则test-jar未构建,并且依赖于它们的任何模块都将无法构建。

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

答案 1 :(得分:37)

我与测试有一些相互依赖,以便构建软件包。

以下命令设法覆盖测试工件的需要以完成目标:

mvn -DskipTests=true  package

答案 2 :(得分:12)

我可以举个例子来说明同样的问题,但它可能无法解答你的问题。 (此外,在此示例中,我使用的是Maven 3知识,可能不适用于Maven 2.)

在多模块maven项目中(包含模块ABB取决于A),您还可以添加测试依赖项<{1}}来自A

此依赖关系可能如下所示:

B

(有关更多信息,请参阅https://maven.apache.org/guides/mini/guide-attached-tests.html
请注意,项目<dependency> <groupId>com.foo</groupId> <artifactId>A</artifactId> <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 2. --> <scope>test</scope> </dependency> 会生成带有分类器A的辅助工件,其中包含测试类和测试资源。

如果使用tests构建项目,只要在本地存储库或外部存储库中找不到测试工件,就会出现依赖项解析错误。原因是测试类既未编译也未生成-Dmaven.test.skip=true工件 但是,如果使用tests运行构建,则会生成-DskipTests工件(虽然测试不会运行),并且依赖关系将得到解决。

答案 3 :(得分:8)

每个参数之间都存在差异。

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

答案 4 :(得分:2)

要在Maven全新安装过程中跳过测试案例,我在以下命令中使用了-DskipTests参数

mvn clean install -DskipTests

进入终端窗口

答案 5 :(得分:1)

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

答案 6 :(得分:1)

我使用以下命令跳过编译和运行测试:

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

答案 7 :(得分:0)

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

  

您可以使用“ -Dmaven.test.skip.exec”代替“ -DskipTests”

来源:Surefire Parameter Details

答案 8 :(得分:0)

我为Intellij用户提供了另一种方法,它对我来说很好用:

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

enter image description here

  1. 按住“ CTRL”按钮
  2. 选择“干净”并“安装”

enter image description here

  1. 单击Maven面板中的“运行”按钮

enter image description here