jmockit-coverage-0.994.jar依存関係をプロジェクトからデフォルトでアクティブではないプロファイルに移動しようとしていますが、プロファイル依存関係から結果クラスパスの先頭に挿入できません。
4 に答える
バージョン 2.0.9 以降、Maven は pom にリストされているのと同じ方法で依存関係を並べ替えます。そうは言っても、プロファイルから依存関係をマージし始めると、すべてが重要になります。有効なポンをチェックして、注文がどのように見えるかを確認することをお勧めします。
mvn help:effective-pom -Pprofile
それがうまくいかない場合、1 つの方法は、dependency:build-classpathを使用することです。別の解決策は、プロファイルの代わりにスコープを使用して包含を実行することです。
Maven 2.0.9 以降では、2.0.9のリリース ノートに記載されているように、クラスパスを構築するときに依存関係の自然な順序が実際に保持されます。
MNG-1412 / MNG-3111は、クラスパスへの依存関係の決定論的順序付けを導入しました。以前は、セットの自然順序付けが使用されていたため、奇妙な結果が生じていました。順序は pom から保持され、継承によって追加された依存関係が最後に追加されます。依存関係が競合または重複しているビルドでは、これにより出力が変更される可能性があります。つまり、2.0.9 で奇妙な問題が発生した場合は、依存関係を調べて、どこかに競合がないかどうかを確認してください。
したがって、POM の依存関係の順序を試すことで、実際にクラスパスを操作できます (これは、プロファイルを操作するときに少し難しくなる可能性がありますが、実際の問題に関する詳細を提供していないため、詳細なガイダンスを提供するのは困難です) )。
私の問題を解決するよりエレガントな方法を見つけたので、上記のアクティブなプロファイルを使用するハックをロールバックしました。
問題の原因は、JUnit (クラスパスで JMockit の後にある必要がある) へのコンパイル スコープ依存関係を持ついくつかの testutils モジュールの使用による推移的な依存関係でしたが、親 POM テストの依存関係は次のように定義されていました。
...
<dependencies>
<dependency>
<groupId>mockit</groupId>
<artifactId>jmockit</artifactId>
<version>0.994</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
...
<profiles>
<profile>
<id>coverage</id>
<dependencies>
<dependency>
<groupId>mockit</groupId>
<artifactId>jmockit-coverage</artifactId>
<version>0.994</version>
<scope>test</scope>
</dependency>
</dependencies>
</profile>
...
見つかった解決策は、JUnit スコープをテストから提供に置き換えることでした。
それはより良いトリックですか?
自分の質問に多くの回答をして申し訳ありません...
しかし、jmockit-coverage の実行をシステム プロパティで構成できるようになったため、maven deps を使用するトリックは必要ありません。0.955 バージョンのリリース ノートおよび関連する問題 22を参照してください。