2013-11-03 10 views
6

Bバージョン1.0に推移依存性を有します。新しいバージョンのBは古いバージョンよりも優先されますか? 私はmaven depencdy:resolve goalを使用しました。それはの古いバージョンBのように見えますが、解決されていません。 の新しいバージョンとの互換性がない場合Bバージョン2.0に依存し、私のプロジェクトが稼働して依存関係の後Bバージョン1.0の明示的な依存関係を持っている場合または:私はBの新しいバージョンを、次に表示されていない目標を解決します。では、これらの依存関係はどのように解決されますか?依存関係の新しいバージョンは、Mavenプロジェクトの古いバージョンよりも優先されますか?私は<strong>に明示的な依存関係を持ってMavenプロジェクト</strong>と<strong>Bバージョン2.0</strong>と<strong></strong>を持っている場合

私が解決目標を使用するとき、それは依存関係を示します。しかし、この依存関係はどの段階で使用されますか?コンパイル、テスト、ランタイム?

答えて

9

依存関係ツリーのルートに近いバージョンが優先されます。競合するバージョンの両方がツリー内で同じ深さを持つ場合、最初のもの(ツリーの先頭から始まる)が優先されます。

これは完全に愚かなルールですか?はい、そうです。唯一の利点は、依存関係の特定のバージョンを、プロジェクトの直接の依存関係として宣言することによって、常に強制的に特定のバージョンの依存関係を強制できることです。

あなたのケースでは、直接依存関係として宣言されているため、B:2.0が使用されます。 AがB:2.0で正常に動作しない場合は、コードでB:1.0を使用するか、Aと同じことをするが矛盾は生じない別のライブラリを選択します。

1

依存関係ツリーで複数のバージョンが参照されている場合は、新しいバージョンのアーティファクトを選択しないでください。 http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.htmlを見ると、ツリーのルートから最も近い定義を選択するようです。つまり、メインのPOMのバージョンは、推移的な依存関係のバージョンより優先されます。つまり、あなたのプロジェクトがB v1.0に依存していて、AがB v2.0に過渡的な依存関係を持っていたら、あなたのプロジェクトはB v1.0を選択するでしょう。

関連する問題