多模块项目中的Maven测试依赖项

多模块项目中的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以使其生成。我怎样才能解决这个问题?

+0

请问你能分享一下你父母的样子吗? – 2009-11-12 23:51:37

我对你正在尝试做什么有疑问,但是我会假设你想要在另一个项目中重用为一个项目(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 installmvn 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> 
+3

帕斯卡。首先非常感谢您回答所有Maven问题! 关于这个问题。我仍然有问题。我在我想用于所有子对象的核心模块之一中有一些testBase类。 我们现在已经有了我们CI中的maven构建。如果我不想做任何安装部署到测试jar,只是从中继签出新的副本并运行mvn测试。 这失败了,因为我没有任何地方的测试jar。 任何想法如何处理? – Roman 2010-03-28 09:49:33

+0

@Roman运行安装是“自然”的方式。但它看起来像你找到了一个解决方法。 – 2010-03-28 13:30:17

+0

它似乎是这个问题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,它将在测试的编译阶段可用,而不仅仅在软件包阶段之后。

适合我。

+1

感谢提示@罗曼这已经非常有用。 – 2010-11-18 12:13:48

+1

是的,非常方便。感谢分享。我想只有当你有公司目录时,部署方法才会更好(是的,我知道这是强烈建议的)。感谢@罗曼 – Damien 2010-12-02 21:04:28