在多模块maven项目中的模块之间共享src / test类

我有一个多模块的Maven项目。 为了这个例子,考虑两个模块:

  • data
  • consumer

模块consumer将模块data作为依赖项。

模块data声明了一堆核心类。 在src/test下有一些testing使用它们。 这些testing需要一些冗长的对象创build,所以我有一个类中有一些实用的方法来创build这些对象。 此实用程序类( SampleDataHelper )位于src/test层次结构中。

我也有consumer模块中需要创build一些这些冗长的对象的一些testing。 我想在驻留在我的consumer src/test树中的testing中使用我的SampleDataHelper类(在data src/test定义)。 不幸的是,即使dataconsumer的依赖, consumer也看不到data src/test下存在的类。

为了解决这个问题,我想我可能会创build另一个模块( data-test ),并将SampleDataHelper移动到src/main 。 然后,我将包含data-test作为data-testtesting范围依赖关系。 不幸的是,这引入了循环依赖: data使用data-test ,但data-test也需要data

我唯一的解决scheme是将SampleDataHelper放在data src/main下的一个test包下,希望没有真正的应用程序代码可以调用它。

我怎样才能在模块之间共享我的SampleDataHelper类, 而不是把它放在src/main

您的消费者项目取决于您的数据项目,因此我们很高兴数据必须在消费者之前构build。 因此,使用评论中build议的技术,我会确保你的Data项目包含你想要共享的所有testing代码,并configurationPOM来产生一个testingJAR:

 <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> 

您的Consumer项目将依赖于正常的Data JAR工件以及额外的test-jar工件,并且当然还有testing范围:

 <dependency> <groupId>com.foo</groupId> <artifactId>data</artifactId> <version>1.0</version> <type>test-jar</type> <scope>test</scope> </dependency> 

我已经在很多场合使用了这种方法,而且效果很好。

所以问题是data模块中的(一些)testing依赖于SampleDataHelper类? 如果您同时将testing(依赖于特定的类)移动到data-test模块的src/test ,您可以将SampleDataHelper类移动到data-test模块的src/main 。 因此,不会有更多的循环依赖。