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

时间:2013-02-06 06:24:04

标签: java maven maven-3

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

  • data
  • consumer

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

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

我还在consumer模块中进行了一些测试,需要创建一些这些冗长的对象。我想在SampleDataHelper树中的测试中使用我的data src/test类(在consumer src/test中定义)。不幸的是,即使dataconsumer的依赖关系,consumer也看不到data src/test下的类。

为了解决这个问题,我想我可以创建另一个模块(data-test),并在 SampleDataHelper src/main >。然后我将data-test包含为data测试范围依赖项。不幸的是,这引入了循环依赖:data使用data-test,但data-test也需要data

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

如何在模块之间共享我的src/main课程,而将其放在{{1}}下?

2 个答案:

答案 0 :(得分:122)

您的Consumer项目取决于您的Data项目,因此我们很高兴Data必须在Consumer之前构建。因此,使用建议in the comments的技术,我将确保您的Data项目包含您希望共享的所有测试代码,并配置POM以生成测试JAR:

<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工件,当然还有测试范围:

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

我在很多场合都使用过这种方法而且效果很好。

答案 1 :(得分:1)

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