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

我有一个多模块的 Maven 项目:

  • data
  • consumer

模块 consumer具有模块 data作为依赖项。

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

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

为了解决这个问题,我想我可以创建 另一个模块(data-test) ,并将 SampleDataHelper移动到 SampleDataHelper0下面。然后我将包括 data-test作为 dataSampleDataHelper1依赖。不幸的是,这引入了一个循环依赖项: data使用 data-test,但是 data-test也需要 data

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

如何在模块 没有之间共享我的 SampleDataHelper类,把它放在 src/main下面?

63766 次浏览

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

您的消费者项目依赖于您的数据项目,因此我们很高兴数据必须在消费者之前构建。因此,使用建议的 在评论中技术,我将确保您的 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>

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