明確にすることが、this is the passage of the documentation:
テスト
このスコープは、依存関係は、アプリケーションの通常の使用のために必要とされていないことを示し、およびテストのコンパイルと実行の段階でのみ使用可能です。この範囲は推移的ではありません。 POMで依存関係を宣言し、POMで宣言された依存関係の推移的依存関係を考慮:
これら2つの文は、依存関係の解決中に上昇することができますケースを扱います。
最初の部分は、POMにスコープtest
の依存関係を設定すると、その依存関係がテストクラスパスでのみ使用可能になることを意味します。 (src/main/java
下)メインJavaクラスでそれを使用しようと
<dependency>
<!-- GAV coordinates -->
<scope>test</scope>
</dependency>
は、コンパイルエラーになり、テストJavaクラスでそれを使用して:あなたは明示的にPOMで依存性を宣言したとき、別の言い方をすれば、それが適用されます(src/test/java
より)正常に動作します。
2番目の部分は、POMで宣言されている依存関係の依存関係に適用されます。つまり、POMで宣言された依存関係のテストスコープ依存性は省略されます。たとえば、Aと呼ばれるライブラリにコンパイル時の依存関係があり、A自体がBにテストスコープの依存関係を持っているとします。依存関係の解決ではBは無視され、クラスパスには終わりません。論理は、テストを実行するにはAがBを必要としますが、AのコンシューマーはBを使用する必要がないということです。これらのテストスコープの依存関係は、宣言された依存関係の範囲(compile
、runtime
、またはtest
)でも常に省略されます。そのため、test
スコープは非推移的と呼ばれます。
他の言い方をすれば、それはすべて「some pom」の意味に依存します。 POMにテストスコープの依存関係を宣言するときは、テストクラスパス上で利用可能になります。 compile
とruntime
のスコープは推移的であり、test
のスコープで継承されるため、そのコンパイルと実行時の推移依存はすべてテストクラスパスでも利用可能になります。 POMが独自のものでない場合、テストスコープの依存関係は常に省略されます(したがって、その依存関係も省略されます)。
私は "ポンは自分のものではない"という行を得られなかったのですが、それを詳しく教えてください。 –
@ user2509521「pomが自分のものでないとき」とは、私が他の依存関係のPOM、つまり推移的な依存関係について話していることを意味します。私の依存関係の依存関係がスコープテストのものであれば、解決の際に省略されます。 – Tunaki