Maven跳过测试


225

我正在使用Maven 2.2.1并使用以下命令来构建我的项目

mvn clean install -Dmaven.test.skip=true

但是,该构建失败称无法找到工件之一。但是,当我使用时:

mvn clean install -DskipTests

一切正常。

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

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


1
您正在使用哪个版本的maven-surefire-plugin?与您正在阅读的doc版本相同吗?
gerrytan

2
一个跳过构建,另一个跳过运行。如果您想两者都使用。
Elliott Frisch 2014年

1
您能否提供失败的详细信息-错误消息或stacktrace?
拉古拉姆

1
为什么要使用已经定义为EoL的 Maven较旧版本。
khmarbaise 2014年

1
那么,要完全跳过我必须使用的所有与测试相关的事情,真的是真的-Dmaven.test.skip=true -DskipTests吗?一方或另一方有时可以省略,视情况而定,但谁愿意去思考..这
兰登库恩

Answers:


120

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

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


2
如何解决这个问题呢?作为我的在线maven命令,请使用-Dmaven.test.skip。
海王星

2
@neptune什么问题?如果您有新问题,请使用新帖子提问。
Mureinik

58

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

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

mvn -DskipTests=true  package

29

每个参数之间存在差异。

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


15

我可以举一个例子,说明同样的问题,但可能无法回答您的问题。(此外,在此示例中,我使用的是Maven 3知识,但可能不适用于Maven2。)

在多模块maven项目(包含模块ABB取决于A)中,您还可以添加对from 的测试依赖项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>

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

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



9

根据您的surefire插件版本,参数-DskipTests可能不起作用。

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

资料来源:Surefire参数详细信息


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>

1
即使您这样做,它也会跳过测试mvn test
Pratik Singhal '18
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.