Maven 依存関係の複数のスコープ宣言の正しい方法は? 質問する

Maven 依存関係の複数のスコープ宣言の正しい方法は? 質問する

testスコープ内(ユニット テストの実行時にクラスパス内に存在するように)およびスコープ内(デプロイメント用に WAR/EAR/その他のパッケージに含めることができるが、依存成果物の推移的依存関係runtimeの検索には影響しないようにするため)で使用したい依存関係があります。

実際の例としては、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'. 

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

ベストアンサー1

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

依存関係が推移的に解決されるのを避けるために、オプション<optional>true</optional>

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback</artifactId>
  <version>0.5</version>
  <scope>runtime</scope>
  <optional>true</optional>
</dependency>

おすすめ記事