多模块项目中的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 install
或mvn 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的编译阶段中可用,而不仅仅在软件包阶段之后。
为我工作。