多模块项目中的Maventesting依赖项

我使用maven来构build一个多模块项目。 我的模块2依赖于模块1 src在编译范围和模块1testing在testing范围。

第2单元 –

<dependency> <groupId>blah</groupId> <artifactId>MODULE1</artifactId> <version>blah</version> <classifier>tests</classifier> <scope>test</scope> </dependency> 

这工作正常。 说我的模块3取决于Module1 src并在编译时testing。

第3单元 –

  <dependency> <groupId>blah</groupId> <artifactId>MODULE1</artifactId> <version>blah</version> <classifier>tests</classifier> <scope>compile</scope> </dependency> 

当我运行mvn clean install ,我的构build运行到模块3,在模块3失败,因为它无法解决模块1testing依赖性。 然后,我单独在模块3上进行mvn install ,返回并在我的父pom上运行mvn install以使其生成。 我该如何解决这个问题?

我怀疑你正在做什么,但是我会假设你想在另一个项目(module1)中重用你已经创build的testing。 正如使用附加testing指南底部的说明所解释的那样:

请注意,本指南的以前版本build议使用<classifier>tests</classifier>而不是<type>test-jar</type> 。 虽然目前这种方法适用于某些情况,但是如果在安装之前的生命周期阶段被调用,那么在testingJAR模块的反应器构build和任何消费者期间它不能正常工作。 在这种情况下,Maven不会从反应堆构build的输出中parsingtestingJAR,而是从本地/远程库中parsingtestingJAR。 很明显,库中的JAR可能已经过时或完全丢失,导致构build失败(参见MNG-2045 )。

所以,首先,将编译的testing打包到一个JAR中,并将它们部署以供常规重用,请按如下所示configurationmaven-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> 

然后,像往常一样安装/部署testingJAR工件(使用mvn installmvn deploy )。

最后,要使用testingJAR,您应该指定一个与指定types的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> 

关于我对帕斯卡尔问题的评论,我想我已经find了一个愚蠢的答案:

 <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>标签。

我将创buildtestingjar,它将在testing的编译阶段中可用,而不仅仅在软件包阶段之后。

为我工作。