70

スコープ内で使用したい依存関係がありtestます (単体テストを実行しているときにクラスパスに含まれるようにするため)、およびruntimeスコープ内で使用したい依存関係があります (デプロイ用の WAR/EAR/その他のパッケージに含めることができますが、影響は与えません)依存アーティファクトの推移的な依存関係ルックアップ)。

実際の例は、SLF4J の実装 JAR (例Logback) です。テストを実行しているときにクラスパスに存在させたいのですが、WAR/EAR に含めたいのですが、プロジェクトに依存するプロジェクトがそれを推移的な依存関係ルックアップに含めたくありません。

使用しようとしまし<scope>test,runtime</scope>たが、Maven 3 で警告が表示されます。

[WARNING] 'dependencies.dependency.scope' for org.slf4j:jcl-over-slf4j:jar 
must be one of [provided, compile, runtime, test, system] but is 'test,runtime'. 

このような場合、依存スコープを宣言する正しい方法は何ですか?

4

4 に答える 4

43

また、ランタイム スコープにより、テスト クラスパスでアーティファクトを使用できるようになります。ランタイムを使用するだけです。(Maven のドキュメントを参照してください。)

依存関係が推移的に解決されるのを避けるために、次のようにしてオプションにし<optional>true</optional>ます。

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback</artifactId>
  <version>0.5</version>
  <scope>runtime</scope>
  <optional>true</optional>
</dependency>
于 2013-04-10T22:13:36.417 に答える
13

タグごとに 1 つのスコープ値のみを定義できます<scope/>

残念ながら、スコープを使用するだけでは、あなたがやりたいことを達成することはできません。のスコープを定義するとtest、テスト中にのみ使用可能になります。provided のスコープを定義すると、プロジェクトの依存関係が解決され、コンパイルとテストの両方で使用されることが期待されることを意味しますが、WAR ファイルには含まれません。いずれにせよ、それはあなたが望むものではありません。

したがって、それを実現できるmaven-assembly-pluginを確認することをお勧めしますが、それでも多少の試行錯誤が必要です。

于 2013-01-30T10:55:08.723 に答える