私のプロジェクトでは、openejb-core
のスコープがprovided
であるとします。しかし、それはslf4j
の推移的依存性を持ち、その範囲はcompile
です(スクリーンショット参照)。他のすべての推移的な依存関係は、期待どおりに提供されます。依存関係にスコープがあるときにMavenの推移依存性がコンパイルされる
質問:これはバグですか、何か不足していますか?サンプルポンポンで
私のプロジェクトでは、openejb-core
のスコープがprovided
であるとします。しかし、それはslf4j
の推移的依存性を持ち、その範囲はcompile
です(スクリーンショット参照)。他のすべての推移的な依存関係は、期待どおりに提供されます。依存関係にスコープがあるときにMavenの推移依存性がコンパイルされる
質問:これはバグですか、何か不足していますか?サンプルポンポンで
は、私が追加:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>4.7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
が次に実行されている:
はmvn dependency:tree -Dincludes=org.slf4j
出力は、次のとおりです。あなたがMAVを見ることができるように
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-junit ---
[INFO] com.sample:test-sample:jar:0.0.1-SNAPSHOT
[INFO] \- org.apache.openejb:openejb-core:jar:4.7.0:provided
[INFO] +- org.slf4j:slf4j-jdk14:jar:1.7.7:provided
[INFO] \- org.slf4j:slf4j-api:jar:1.7.7:provided
enはそのofficial documentationと一貫しています。あなたのスクリーンショットの問題はおそらくあなたのIDEにあります。
それから、私たちはスコープcompile
に推移であるかruntime
が提供スコープで何が起こるのか、スコープ内にあるものprovided
かtest
が無視されることがわかります。
の表は、このトピックに関する重要なポイントです。私は私のサンプルのPOMを変更した場合
しかし、:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-junit ---
[INFO] com.sample:test-sample:jar:0.0.1-SNAPSHOT
[INFO] +- org.apache.openejb:openejb-core:jar:4.7.0:provided
[INFO] | \- org.slf4j:slf4j-jdk14:jar:1.7.7:provided
[INFO] \- org.slf4j:slf4j-api:jar:1.7.7:compile
ルック今:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>4.7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
</dependencies>
そして、依存関係ツリーのコマンドを再実行し、出力は次のようになり、それはようではない来ます提供された依存関係の子ですが、同じレベルです。
続きます。
私はsl4f-api
依存関係を削除するが、私はPOMに以下を追加し、私のサンプルポンポンの場合:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
、再再実行して依存関係ツリーコマンド、私は最終的にあなたのスクリーンショットと同じを取得します:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-junit ---
[INFO] com.sample:test-sample:jar:0.0.1-SNAPSHOT
[INFO] \- org.apache.openejb:openejb-core:jar:4.7.0:provided
[INFO] +- org.slf4j:slf4j-jdk14:jar:1.7.7:provided
[INFO] \- org.slf4j:slf4j-api:jar:1.7.7:compile
ビンゴ:dependencyManagement
セクションもprovided
スコープの調停に影響を与え、推移的依存関係の範囲をオーバーライドしています。これはバグではなく、このセクションのように設計上、依存関係に関するガバナンスの種類を定義します。依存関係は、sl4f-api
を範囲compile
に入れるというdependencyManagement
の決定の影響を受けるopenejb-core
によってのみ導入されるため、この場合のダイアグラムも正しく、誤解を招くものではありません。
詳細な回答ありがとうございます。これは依存関係管理の場合と思われます。私はそのような人生の行動を知らなかった –
このような詳細な答えをありがとう、私のためにいくつかのことをクリアしました。 –
は、スコープコンパイルで別の依存関係によって推移的に導入された同じ依存関係ですか? –
いいえ、この1つだけです –
あなたのプロジェクトに提供されている範囲です。しかし、openejb-coreはコンパイルスコープでそれを宣言している可能性があります。それがコンパイルと見なすことができる理由です。 –