19

test-jarマルチモジュール プロジェクトで依存関係の使用に問題があります。たとえば、モジュールが次のようなcleartk-syntaxモジュールに依存することを宣言すると(完全なコードはこちら):cleartk-tokentest-jar

<modelVersion>4.0.0</modelVersion>
<groupId>org.cleartk</groupId>
<artifactId>cleartk-syntax</artifactId>
<version>0.5.0-SNAPSHOT</version>
<name>cleartk-syntax</name>
...
<dependencies>
    ...
    <dependency>
        <groupId>org.cleartk</groupId>
        <artifactId>cleartk-token</artifactId>
        <version>0.7.0-SNAPSHOT</version>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>

mvn compileMaven 2 を使用して実行すると、次のエラーが発生します。

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) org.cleartk:cleartk-token:test-jar:tests:0.7.0-SNAPSHOT

Maven 3 を使用すると、次のエラーが表示されます。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.654s
[INFO] Finished at: Mon Jan 24 21:19:17 CET 2011
[INFO] Final Memory: 16M/81M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project cleartk-syntax: Could not resolve
dependencies for project org.cleartk:cleartk-syntax:jar:0.5.0-SNAPSHOT: Could
not find artifact org.cleartk:cleartk-token:jar:tests:0.7.0-SNAPSHOT

test-jar後者の場合、 typeではなくtype のアーティファクトを探すべきだと思っていたので、特に混乱していますjar

maven 2 または maven 3 を使用すると、 を実行してコンパイルできますmvn compile package -DskipTests。Maven 3 を使用すると、 を実行してコンパイルすることもできますmvn compile test-compile

しかし、フェーズ中にmaven 2 または maven 3 がtest-jar依存関係を探しているのはなぜですか? そのような依存関係を探すフェーズcompileまで待つべきではありませんか?test-compile

更新:答えは、私のコンパイル フェーズで使用される maven-exec-plugin には、 scope:test 内のアーティファクトの依存関係の解決が必要であるというものでした。scope:test の依存関係を削除する機能リクエストを作成しました。

4

4 に答える 4

11

これは私には明確なバグのように見えます。

私は同じ問題を抱えており、Maven 3.0.1 と 3.0.2 をテストしました。検証は失敗しません。コンパイル ステップのみが失敗します。Maven 3 ではmvn compile壊れますがmvn test-compile動作します。

コンパイル フェーズでは、reactor と repo で test-jar アーティファクトを探しているように見えますが、依存関係がテスト スコープ内にあるため、そうすべきではありません。テスト スコープのアーティファクトは、コンパイルではなく、テスト コンパイル中に解決する必要があります。

その結果、maven-compiler-plugin の testCompile ゴールをデフォルトの test-compile フェーズではなく compile フェーズにマッピングすることで、これを回避できると考えました。

アップストリームのpomにtest-jarの作成を追加する部分のすぐ隣に、これをpomに追加しました。

  <!-- there is a bug in maven causing it to resolve test-jar types
       at compile time rather than test-compile. Move the compilation 
       of the test classes earlier in the build cycle -->
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <executions>
      <execution>
        <id>default-testCompile</id>
        <phase>compile</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

しかし、コンパイルとテスト-コンパイルの間の 5 つのフェーズが実行されておらず、テスト クラスパスなどをセットアップしていないため、これも機能しません。

test-compileこのバグが修正されるまでの実際の回避策は、 の代わりに使用することだと思いcompileます。

于 2011-01-25T23:47:08.717 に答える
1

そこで、本格的なデバッグを行ったところ、問題はexec:javaプラグイン、test-jar依存関係、およびmvn compile.

つまりexec:java、実行フェーズにアタッチすると、コンパイル時mvn compileに依存関係の検索が開始されます。プラグイン宣言から要素test-jarを削除すると、再び正常に動作します。<executions>exec:javamvn compile

exec:java私はここにプラグインのバグレポートを提出しましたが、バグが にexec:javaあるtest-jarかどうかはわかりmvn compileません.

http://jira.codehaus.org/browse/MEXEC-91

更新:これは実際にはバグではありません。maven-exec-plugin は、テストの依存関係が必要であると文書化されています。

http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html

それは、優れた機能にならないという意味ではありません。;-)

于 2011-01-26T08:07:36.603 に答える
0

私はmaven2を使用しています。答えはMavenのライフサイクル管理にあると思います。デフォルトのライフサイクルの最初のステップは検証です。これは、「プロジェクトが正しく、必要なすべての情報が利用可能であることを検証する」ことを行います。( http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.htmlを参照)。

したがって、maven は、後で実行するために必要なすべての依存関係を取得するために最善を尽くします。

于 2011-01-24T21:36:04.557 に答える