6

私はMavenが初めてで、いくつかのプロジェクトをMavenで動作するように変換しようとしていますが、それらを構造化する正しい方法がわかりません-ここに私が持っているものがあります:

という名前の共通のモジュールCommonと、両方が依存しているという事実から共通点のない 2 つの異なるアプリケーションがありますCommonAそれらを と と呼びましょうB

A->CommonB->の間の依存関係Commonは、実行時とテストの両方に関係します。つまり、Aのテスト クラスには のテスト クラスが必要ですCommon

考えられるさまざまな組み合わせを試しましたが、どれも私が望むものを生み出しませんでした。Common奇妙なことに、私のコードはコンパイルされますが、テスト クラスがクラスパスに見つからないため、JUnit は失敗します。

2 つの成果物を作成し、両方の成果物Commonに 2 つの依存関係を追加するには、2 つのプロファイルを に追加する必要がありますか? (それは可能ですか?) 私が望んでいたことを行う正しい方法はありますか? Maven に合うようにコードを再構築する必要がありますか?AB

4

3 に答える 3

5

これは、一般的なMavenの落とし穴です。アーティファクトに依存している場合、アーティファクトのテストクラスは利用できません。それは実際には合理的です。に依存するCommon場合は、本番クラス(JARファイル)に依存します。テストクラスは、テストを実行するためにのみ必要であり、最終的なJARには含まれていません。

テストクラスにすべてのテストとテストにCommon必要なユーティリティメソッドが含まれていると仮定すると、推奨される構造は次のとおりです。CommonAB

  • Common-test/src/main/java- (!)に一般的なユーティリティテストクラス(テストケースではありません!)が含まれています
  • Commonに依存しCommon-testます<scope>test</scope>
  • A(デフォルトのスコープで)と(スコープで)の両方にB依存しますCommonCommon-testtest

UML
(出典:yuml.me

于 2012-06-22T17:40:05.820 に答える
2

test-jarプロジェクトでの目標を実行する必要がmaven-jar-pluginありますCommon

これにより、ツリーtestsのすべてのクラスとリソースを含む分類子を使用して新しいアーティファクトが生成されます。src/test

したがって、Commonでこれを追加します。

<plugins>
  ...
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
      <execution>
        <id>test-jar</id>
        <goals>
          <goal>test-jar</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  ...
</plugins>

そして、これAB追加します

<dependency>
  <groupId>common.group.id</groupId>
  <artifactId>Common</artifactId>
  <version>1.0</version>
  <classifier>tests</classifier>
  <scope>test</scope>
</dependency>

<classifier>tests</classifier>この依存関係の宣言に注意してください。

于 2012-06-22T17:42:06.587 に答える
2

次のように構成できます

  • 共通プロジェクト
  • プロジェクト
  • Bプロジェクト

次に CommonProject を<dependency>for A&Bに追加します。これにより、コンパイル時に commonproject が使用可能になり、ビルドがうまくいきます。

A & B が または webapp archtype の場合、実行時に依存関係を取得できるように、依存関係が WEB-INF/lib で利用可能であることを確認する必要があります。

依存関係をその時点でのみ利用できるようにするには、スコープtestを使用できますtest

于 2012-06-22T17:38:04.960 に答える