在多模块行家项目模块之间共享的src /测试类(Sharing src/test classes b

2019-07-19 09:02发布

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

  • data
  • consumer

模块consumer具有模块data作为一个依赖。

模块data声明一堆核心类。 目前正在测试src/test使用它们。 这些测试需要一些啰嗦创建对象,所以我有一些实用方法,它创建这些对象的类。 这个工具类( SampleDataHelper )处于所述src/test层次。

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

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

我想出了唯一的解决办法是把SampleDataHelperdata src/main一个下test包,并希望没有真正的应用程序代码以往任何时候都调用它。

我如何能分享我的SampleDataHelper模块之间的类没有把它下src/main

Answer 1:

你的消费计划取决于你的数据的项目,因此我们很高兴数据必须消费之前建成。 其结果是,使用建议的技术的意见 ,我会确保您的数据项目包含要共享和配置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>

然后,您的消费项目将取决于双方的正常数据JAR神器,加上额外的test-jar神器,当然是有测试范围:

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

我已经在许多场合使用这种方法,它工作得很好。



Answer 2:

所以,问题是,在(部分)测试data模块依赖于SampleDataHelper类? 您可以在移动SampleDataHelpersrc/main的的data-test模块,如果你在同一时间移动测试(依赖于特定的类)的src/test中的data-test模块。 因此,也就没有更多的循环依赖。



文章来源: Sharing src/test classes between modules in a multi-module maven project