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

2022-08-31 07:20:13

我有一个多模块Maven项目。在本例中,请考虑两个模块:

  • data
  • consumer

模块具有模块作为依赖项。consumerdata

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

我在模块中也有一些测试,需要创建一些冗长的对象。我想在驻留在我的树中的测试中使用我的类(在 中定义)。遗憾的是,即使 是 的依赖项,也看不到 存在于 下的类。consumerSampleDataHelperdata src/testconsumer src/testdataconsumerconsumerdata src/test

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

我想出的唯一解决方案是放在一个包下面,并希望没有真正的应用程序代码调用它。SampleDataHelperdata src/maintest

如何在模块之间共享我的类而不将其放在下面?SampleDataHelpersrc/main


答案 1

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

然后,您的使用者项目将依赖于正常的 Data JAR 工件,再加上其他工件,当然还有测试范围:test-jar

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

我曾多次使用这种方法,效果很好。


答案 2

所以问题是模块中的(一些)测试取决于类?如果同时将测试(取决于特定类)移动到模块的 ,则可以将类移动到模块的类。因此,将不再有循环依赖关系。dataSampleDataHelperSampleDataHelpersrc/maindata-testsrc/testdata-test


推荐