2013-01-14 11 views
8

私はたくさんの依存関係を持つ複雑なプロジェクトがあると言います。依存関係のバージョンは、多くのインポートスコープポームによって管理されます。私のプロジェクトはアーティファクトgroup:artifactに依存していますが、それはアーティファクトgroup:transitive-dependencyに依存しています。私はdependency:treeを実行すると、私はこのような何かを参照してください。Mavenの管理対象依存バージョンをトラッキングする

+- group:artifact:jar:1.3 
    +- group:transitive-dependency:jar:1.1 (version managed from 1.3) 

を問題がgroup:artifact:1.3あるgroup:transitive-dependencyバージョン1.3以降が必要です。インポートポームの1つが間違ったバージョンを強制しています。しかし、すべてを調べる以外に、どちらがどれであるかを知る方法はありますか?

+0

はあなたの親proejctに 'MVN site'を実行していると'依存convergence'出力を見てみましたがありますか? – Tim

+0

推移的依存性は依存性コンバージェンスレポートには現れません。依存関係が管理されている場所も示されません。 –

答えて

5

maven-enforcer-pluginを試して、DependencyConvergenceを行うように設定する必要があります。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.2</version> 
    <executions> 
     <execution> 
     <id>enforce</id> 
     <configuration> 
      <rules> 
      <DependencyConvergence/> 
      </rules> 
     </configuration> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

これは、トップレベルの依存関係が、依存関係ツリー内の他の依存関係のバージョンが異なることを示します。次に、除外を使用したくない依存バリアントを抑制します。

2

これは、2つ以上の親Pomsが同じアーティファクトと競合する場合に発生します。ために、例えば

、私の場合に

[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile [INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile (version managed from 2.2)[INFO] | +- oro:oro:jar:2.0.8:compile

は、フレームワーク・コアは、上述log4jextentsions 2.2を有します。私のスーパーポームはlog4jextentsions 2.3と言っています。何とかフレームワークコアはlog4jextentsions 2.2を使用するようにmavenに確信しました。その後、私は2.3を使用するためのフレームワークコアのポンポンを更新するとき

[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile [INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile [INFO] | +- oro:oro:jar:2.0.8:compile

関連する問題