多模块项目中的Maven测试依赖项
我使用maven构建多模块项目。我的模块2依赖于模块1 src在编译范围和模块1在测试范围内测试。多模块项目中的Maven测试依赖项
模块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失败,因为它无法解析模块的测试依赖。然后,我单独在模块3上执行mvn install
,然后在父pom上返回并运行mvn install
以使其生成。我怎样才能解决这个问题?
我对你正在尝试做什么有疑问,但是我会假设你想要在另一个项目中重用为一个项目(module1)创建的测试。截至Guide to using attached tests底部的说明解释:
注意,本指南的以前版本建议使用
<classifier>tests</classifier>
而不是<type>test-jar</type>
。虽然这在当前情况下适用于某些情况,但如果调用安装前的生命周期阶段,则它在测试JAR模块的反应器构建和任何使用者期间无法正常工作。在这种情况下,Maven不会从反应堆构建的输出中解析测试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>
帕斯卡。首先非常感谢您回答所有Maven问题! 关于这个问题。我仍然有问题。我在我想用于所有子对象的核心模块之一中有一些testBase类。 我们现在已经有了我们CI中的maven构建。如果我不想做任何安装部署到测试jar,只是从中继签出新的副本并运行mvn测试。 这失败了,因为我没有任何地方的测试jar。 任何想法如何处理? – Roman 2010-03-28 09:49:33
@Roman运行安装是“自然”的方式。但它看起来像你找到了一个解决方法。 – 2010-03-28 13:30:17
它似乎是这个问题3559而不是2045这是在这一点上:http://jira.codehaus.org/browse/MNG-3559 – HDave 2013-08-14 16:31:14
关于我到帕斯卡的问题,我想我已经找到了stuitable答案评论:
<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,它将在测试的编译阶段可用,而不仅仅在软件包阶段之后。
适合我。
感谢提示@罗曼这已经非常有用。 – 2010-11-18 12:13:48
是的,非常方便。感谢分享。我想只有当你有公司目录时,部署方法才会更好(是的,我知道这是强烈建议的)。感谢@罗曼 – Damien 2010-12-02 21:04:28
请问你能分享一下你父母的样子吗? – 2009-11-12 23:51:37