Maven依存関係をテストランタイム(テストコンパイルではない)クラスパスにのみ使用されると宣言する最良の方法は何ですか?
具体的には、典型的なコンパイルスコープの依存関係としてslf4j-api
(ロギングファサード)が必要ですが、テストランタイムクラスパスにのみslf4j-simple
(単体テストに適した最低限の実装)が必要です(そうではありません)。テストコンパイルに必要)。私はこれをやっています:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
ただし、これの欠点は、dependency:analyze
がslf4j-simple
を未使用として報告することです。これは、おそらくコンパイルに必要ないためです。
[WARNING] Unused declared dependencies found:
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test
runtime
依存関係を推移的に継承したくないため、使用できません(たとえば、ダウンストリームの依存関係で代わりにlog4jなどを使用できます)。 runtime
をoptional=true
で試しましたが、同じ警告が表示されます。
(依存関係プラグインにignoreNonCompile
を設定することもできますが、それは他の潜在的な問題を隠す非常に鈍器のようです。)
ここで必要なことを正確に実行するスコープはありません。 test
は利用可能な最良のオプションです。
test-runtime
スコープが以前に要求されており( Re:テストランタイムスコープが必要ですか? )、推奨される回避策は、既に検出したignoreNonCompile
構成です。
dependency:analyze
にはすでにいくつかの制限があります( "一部のケースは検出されません(定数、ソースのみの保持を持つアノテーション、javadoc内のリンク)" )。警告するtest
- scopeの依存関係は誤検知であることを受け入れる必要がある場合があります。
(あなたcouldは、テストの定義を別のモジュールに分割します。このモジュールにはslf4j
実装の依存関係がなく、別のモジュールで実行します。 。それだけの価値はないと思います。)
Mavenにはテストランタイムの概念はありません。唯一の本当の欠点は、これらのランタイムテストの依存関係を未使用として識別する依存関係分析です。ただし、これらはテストの依存関係にすぎないため、これはかなり害がなく、このプロジェクトに推移的に依存している他のプロジェクトに問題を引き起こすことはありません。
Maven-dependency-plugin 2.10( リビジョン1649454 、2015年1月)以降、構成に ignoredDependencies 、 ignoredUnusedDeclaredDependencies およびのリストを追加することもできます。 ignoredUsedUndeclaredDependencies 。
回避策として、メインプロジェクトに依存するテストケースを含む別のMavenプロジェクトを用意することをお勧めします