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

Gre*_*pff 112 java maven-3 maven

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

  • data
  • consumer

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

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

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

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

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

如何SampleDataHelper在模块之间共享我的课程而不将它放在一起src/main

Dun*_*nes 137

您的Consumer项目取决于您的Data项目,因此我们很高兴Data必须在Consumer之前构建.因此,使用注释中建议的技术,我将确保您的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>
Run Code Online (Sandbox Code Playgroud)

然后,您的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>
Run Code Online (Sandbox Code Playgroud)

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

  • 关于“您的消费者项目将依赖于正常的数据 JAR 工件,以及额外的测试 jar 工件”部分,当我将数据的依赖项添加到消费者(假设我的工件也命名为 data 和消费者)pom 时,没有特定版本规范,pom 出错。为什么会这样? (2认同)