Maven跳过测试

Pra*_*jot 184 maven

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

mvn clean install -Dmaven.test.skip=true
Run Code Online (Sandbox Code Playgroud)

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

mvn clean install -DskipTests
Run Code Online (Sandbox Code Playgroud)

一切正常.

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

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

Mur*_*nik 98

如您所述,-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>
Run Code Online (Sandbox Code Playgroud)

如果指定-Dmaven.test.skip=true(或简单地-Dmaven.test.skip),test-jar则不构建s,并且依赖于它们的任何模块将无法构建.

相比之下,当您使用时-DskipTests,Maven不会运行测试,但它会编译它们并构建测试jar,使其可用于后续模块.

  • 如何解决这个问题呢?正如我的在线maven命令使用-Dmaven.test.skip. (2认同)
  • @neptune有什么问题?如果您有新问题,请使用新帖询问. (2认同)

gil*_*lwo 46

为了构建软件包,我对测试有一些相互依赖性.

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

mvn -DskipTests=true  package
Run Code Online (Sandbox Code Playgroud)

  • 只需在命令行上输入“... -DskipTests ...”就足够了。 (11认同)
  • @GeroldBroser,如果您的测试出现编译错误,“-DskipTests”将使构建失败,而“-Dmaven.test.skip=true”由于跳过了测试编译而通过 (2认同)

Nir*_*edi 20

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

mvn clean install -DskipTests
Run Code Online (Sandbox Code Playgroud)

进入终端窗口

  • `-DskipTests` 不仅仅跳过测试用例。它会跳过_所有_测试用例。 (2认同)

小智 15

每个参数之间存在差异.

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


vts*_*mis 14

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

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

来源:Surefire 参数详情


Ste*_*vra 13

我可以给你一个例子,结果有同样的问题,但它可能不会给你一个问题的答案.(另外,在这个例子中,我正在使用我的Maven 3知识,这可能不适用于Maven 2.)

在多模块Maven项目(包括模块AB,其中B取决于A),你还可以添加一个测试依赖AB.

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

<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>
Run Code Online (Sandbox Code Playgroud)

(有关更多信息,请参阅https://maven.apache.org/guides/mini/guide-attached-tests.html)
请注意,该项目A使用分类器生成辅助工件,tests其中包含测试类和测试资源.

如果使用构建项目-Dmaven.test.skip=true,只要在本地存储库或外部存储库中找不到测试工件,就会出现依赖项解析错误.原因是测试类既未编译也未生成tests工件.
但是,如果你运行构建-DskipTests你的tests神器会产生(尽管测试将无法运行)和依赖将会得到解决.


Meh*_*idi 10

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

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

在此输入图像描述

  1. 按住“CTRL”按钮
  2. 选择“清理”和“安装”

在此输入图像描述

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

在此输入图像描述


Raz*_*ssa 9

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

mvn install -Dmaven.test.skip
Run Code Online (Sandbox Code Playgroud)

来自Maven Surefire 插件文档

...您还可以使用 maven.test.skip 属性来跳过编译测试。maven.test.skip 受到 Surefire、Failsafe 和编译器插件的认可。

更多加快安装速度的方法可以在“如何使 Maven 构建更快? ”问题的答案中找到。


Rad*_*unj 7

在 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>
Run Code Online (Sandbox Code Playgroud)

  • 即使您执行“mvn test”,它也会跳过测试 (3认同)