我使用maven构建一个多模块项目。我的模块2依赖于编译范围的模块1 src和模块1在测试范围内的测试。
第2单元 -
<dependency>
<groupId>blah</groupId>
<artifactId>MODULE1</artifactId>
<version>blah</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
这很好用。假设我的模块3依赖于Module1 src并在编译时进行测试。
第3单元 -
<dependency>
<groupId>blah</groupId>
<artifactId>MODULE1</artifactId>
<version>blah</version>
<classifier>tests</classifier>
<scope>compile</scope>
</dependency>
当我运行mvn clean install
时,我的构建运行到模块3,在模块3处失败,因为它无法解析模块1测试依赖性。然后我单独在模块3上执行mvn install
,返回并在我的父pom上运行mvn install
以使其构建。我该如何解决这个问题?
答案 0 :(得分:114)
我怀疑你要做什么,但我会假设你想重用你为另一个项目(module1)创建的测试。正如Guide to using attached tests:
底部的说明中所述请注意,本指南的前几版建议使用
<classifier>tests</classifier>
代替<type>test-jar</type>
。虽然目前适用于某些情况,但在调试JAR模块的反应器构建期间,如果调用安装之前的生命周期阶段,则它在任何使用者中都无法正常工作。在这种情况下,Maven不会从reactor构建的输出解析测试JAR,而是从本地/远程存储库解析测试JAR。显然,存储库中的JAR可能已过时或完全丢失,导致构建失败(参见MNG-2045)。
因此,首先,要在JAR中打包已编译的测试并将其部署以进行常规重用,请按如下方式配置maven-jar-plugin
:
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
然后,照常安装/部署测试JAR工件(使用mvn install
或mvn deploy
)。
最后,要使用测试JAR,您应该指定具有指定类型test-jar
的依赖项:
<project>
...
<dependencies>
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
...
</project>
答案 1 :(得分:16)
关于我对Pascals问题的评论,我想我找到了一个合适的答案:
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
<phase>test-compile</phase>
</execution>
</executions>
<configuration>
<outputDirectory>${basedir}\target</outputDirectory>
</configuration>
</plugin>
</plugins>
此处的主要区别在于<phase>
标记。
我将创建测试jar,它将在测试的编译阶段提供,而不仅仅是在打包阶段之后。
适合我。
答案 2 :(得分:2)
https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html说:
如何创建包含测试类的jar 当您想创建一个包含测试类的jar时,您可能想重用这些类。有两种解决方法:
The easy way
使用当前项目中的测试类创建一个附加jar,并释放其可传递的测试作用域依赖性。
The preferred way
用测试类创建一个单独的项目。
请详细阅读该文章。