152

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

  • data
  • consumer

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

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

我在模块中还有一些测试consumer需要创建其中一些冗长的对象。我想在我的树中的测试中使用我的SampleDataHelper类(在 中定义)。不幸的是,即使是 的依赖项,也看不到.data src/testconsumer src/testdataconsumerconsumerdata src/test

为了解决这个问题,我想我可能会创建另一个模块 ( data-test),并SampleDataHelpersrc/main. 然后会将. data-test_ 不幸的是,这引入了循环依赖:使用,但也需要。datadatadata-testdata-testdata

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

我怎样才能在模块之间共享我的SampleDataHelper课程而不把它放在下面src/main

4

2 回答 2

196

您的消费者项目取决于您的数据项目,因此我们很高兴必须在消费者之前构建数据。因此,使用评论中建议的技术,我将确保您的数据项目包含您希望共享的所有测试代码,并配置 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>

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

于 2013-02-06T07:48:26.203 回答
1

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

于 2013-02-06T06:38:15.787 回答