152

マルチモジュールの Maven プロジェクトがあります。この例のために、2 つのモジュールを考えます。

  • data
  • consumer

モジュールconsumerにはモジュールdataが依存関係にあります。

モジュールdataは、一連のコア クラスを宣言します。それらを使用するテストがありsrc/testます。これらのテストではオブジェクトの作成に時間がかかるため、これらのオブジェクトを作成するためのいくつかのユーティリティ メソッドを含むクラスを作成します。このユーティリティ クラス ( SampleDataHelper) はsrc/test階層にあります。

consumerモジュールには、これらの長いオブジェクトのいくつかを作成する必要があるいくつかのテストもあります。ツリーにあるテストでSampleDataHelperクラス ( で定義)を使用したいと考えています。残念ながら、は に依存していますが、の下に存在するクラスは表示されません。data src/testconsumer src/testdataconsumerconsumerdata src/test

これに対抗するために、別のモジュール ( ) を作成し、 の下にdata-test移動することを考えました。次に、テスト範囲の依存関係として. 残念ながら、これは循環依存を導入します。SampleDataHelpersrc/maindata-testdatadatadata-testdata-testdata

私が思いついた唯一の解決策は、パッケージの下SampleDataHelperに配置し、実際のアプリケーション コードがそれを呼び出さないようにすることです。data src/maintest

クラスを下に置かSampleDataHelperに、モジュール間でクラスを共有するにはどうすればよいですか?src/main

4

2 に答える 2

196

コンシューマー プロジェクトはデータ プロジェクトに依存するため、コンシューマーの前にデータをビルドする必要があります。その結果、コメントで提案されている手法を使用して、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>

私はこのアプローチを何度も使用してきましたが、うまく機能しています。

于 2013-02-06T07:48:26.203 に答える
1

問題は、モジュール内の (一部の) テストがクラスdataに依存していることですか? テスト (特定のクラスに依存する) をモジュールの に同時に移動すると、クラスをモジュールのに移動SampleDataHelperできます。したがって、循環依存関係はなくなります。SampleDataHelpersrc/maindata-testsrc/testdata-test

于 2013-02-06T06:38:15.787 に答える