2016-02-17 12 views
6

私のプロジェクトでは、openejb-coreのスコープがprovidedであるとします。しかし、それはslf4jの推移的依存性を持ち、その範囲はcompileです(スクリーンショット参照)。他のすべての推移的な依存関係は、期待どおりに提供されます。依存関係にスコープがあるときにMavenの推移依存性がコンパイルされる

質問:これはバグですか、何か不足していますか?サンプルポンポンで

enter image description here

+0

は、スコープコンパイルで別の依存関係によって推移的に導入された同じ依存関係ですか? –

+0

いいえ、この1つだけです –

+0

あなたのプロジェクトに提供されている範囲です。しかし、openejb-coreはコンパイルスコープでそれを宣言している可能性があります。それがコンパイルと見なすことができる理由です。 –

答えて

10

は、私が追加:

<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にあります。 enter image description here

それから、私たちはスコープcompileに推移であるかruntimeが提供スコープで何が起こるのか、スコープ内にあるものprovidedtestが無視されることがわかります。

の表は、このトピックに関する重要なポイントです。私は私のサンプルの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によってのみ導入されるため、この場合のダイアグラムも正しく、誤解を招くものではありません。

+0

詳細な回答ありがとうございます。これは依存関係管理の場合と思われます。私はそのような人生の行動を知らなかった –

+0

このような詳細な答えをありがとう、私のためにいくつかのことをクリアしました。 –

関連する問題