2014-12-31 11 views
13

Maven依存関係をテストランタイム(テストコンパイルではない)のクラスパスとしてのみ使用すると宣言する最も良い方法は何ですか?Maven依存関係をテストランタイムとして宣言する

具体的には、通常のコンパイルスコープの依存関係として、ログオンファサードが必要ですが、テストランタイムクラスパス上でのみslf4j-simple(ユニットテストに適したベアボーンの実装)が必要です(テストコンパイルには不要です)。私はこれを行ってきた:

[WARNING] Unused declared dependencies found: 
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test 

私はruntimeを使用することはできません。

<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それはコンパイルに必要ではないですおそらくので、未使用ということです(例えば、下流の依存関係がlog4jなどを代わりに使用できるように)従属関係を推移的に継承したくないからです。私はoptional=trueruntimeを試しましたが、同じ警告が表示されます。

(私も依存関係のプラグインのignoreNonCompileを設定することができることに注意してください、それが他の潜在的な問題を隠してしまう非常に鈍器のように思える。)

+0

実行時にメインソースには何が必要ですか?ランタイムスコープの依存関係についてはまだ不平を言いませんか? –

+0

一般に、推移的依存関係を宣言する必要はありません。オプションの依存関係(通常、異なるフレームワークを使用できるロギングのような)では、プロシージャは正しいです。スコープテストを追加することもできます。 –

+0

また、(間違って、IMHO) 'ランタイム'の依存関係についても文句を言うので、スコープだけでは解決できないようです。私が本当に望むのは、 'test'と' runtime'(クラスパスまで)の交差点であるスコープと、依存性プラグインが ''未使用 ''ランタイム'依存性についてあまり愚かではないということです。 –

答えて

7

正確にここで必要な範囲を指定するスコープはありません。 testが最適なオプションです。

test-runtimeスコープが(Re: Need for a test-runtime scope?)より前に要求されており、推奨される回避策は既に発見したignoreNonCompileの設定です。

dependency:analyzeには既に制限があります("some cases are not detected (constants, annotations with source-only retention, links in javadoc)")。警告すると、test-scopeの依存関係は誤検出であると受け入れる必要があるかもしれません。

(あなたがは別のモジュールでそれらを実行し、その後、何slf4j実装の依存関係を持っていないだろう、別のモジュール、にあなたのテストの定義を分割することができた。私はそれはそれ価値があるだろうとは思いません。)

+1

javadocの問題については、完全修飾クラス名にリンクし、javadocプラグインにベースリンクURLを追加し、プロジェクトへの依存関係を宣言していないことに気づきました。これにより、インポートステートメントや、実際には必要ない依存関係がリストされるという潜在的なマイナスの問題が回避されます。 –

4

のmavenでテスト実行時間の概念がありません。唯一の実際の欠点は、これらのランタイムテストの依存関係を未使用として識別する依存性分析です。しかし、これらはテストの依存関係に過ぎないため、このプロジェクトに依存している他のプロジェクトには問題は生じません。

2

maven-dependency-plugin 2.10(revision 1649454、2015年1月)以降、設定にignoredDependencies,ignoredUnusedDeclaredDependenciesignoredUsedUndeclaredDependenciesのリストを追加することもできます。

+0

もう少し説明できますか? –

+0

これらのオプションは、私が質問した直後に追加されたもので、受け入れられた答えと合わせて、この問題に対処するための最良の方法だと思います。 –

関連する問題