2023-12-12 09:00:03

Maven跳过测试

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

mvn clean install -Dmaven.test.skip=true

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

mvn clean install -DskipTests

一切都很顺利。

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

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


当前回答

如你所述,- dmarvin .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),则不会构建测试jar,并且依赖于它们的任何模块都会构建失败。

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

其他回答

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

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

mvn -DskipTests=true  package

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

mvn clean install -Dmaven.test.skip=true

如你所述,- dmarvin .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),则不会构建测试jar,并且依赖于它们的任何模块都会构建失败。

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

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

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

来源:Surefire参数详细信息

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

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

使用Maven的最新版本

给出命令位变化的方式。

下面的命令将工作得很好

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