在多模块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
定义)。 不幸的是,即使data
是consumer
的依赖, consumer
也看不到data src/test
下存在的类。
为了解决这个问题,我想我可能会创build另一个模块( data-test
),并将SampleDataHelper
移动到src/main
。 然后,我将包含data-test
作为data-test
的testing范围依赖关系。 不幸的是,这引入了循环依赖: 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
。 因此,不会有更多的循环依赖。