Mavenの依存関係のバージョンの範囲

Number945:

私は、私たちの依存関係のバージョンのために言及したとき3.8.2 VS [3.8.2]の違いを理解したいです。

ここで

このようJUnitのための3.8.2として「通常」バージョンを宣言すると、内部的にこれは「何もできますが、3.8.2を好む。」と表現されます 競合が検出されたときに、この手段は、Mavenは最高のバージョンを選択するために競合アルゴリズムを使用することが許可されていること。あなたは[3.8.2]を指定した場合、それが唯一の3.8.2を使用しないと何もされることを意味します。どこか別の場所を指定し、[3.8.1]その依存関係がある場合は、競合のあなたを伝えるビルドの失敗になるだろう。私たちは、オプションのあなたを認識させるために、このアウトを指しますが、本当に必要なときは控えめにのみ、それを使用しています。これを解決するための好ましい方法はdependencyManagement経由です。

しかし、私は何かがここで間違っている気がします。

私が書いた場合<version>3.8.2</version>、当社の依存関係のために、そのバージョンのアーティファクトは、それが何か他のものを選んでいません、私たちのMavenリポジトリに存在しません。ビルドは単に失敗します。だから、なぜ彼らが言っているの上に- 「何でもできますが、3.8.2を好みます」

また、彼らは言います- This means that when a conflict is detected,...私はこれを理解することはできませんよ。どのような可能性は、3.8.2のために発生しますが、[3.8.2]のために発生していない競合することができますか?

JFマイヤー:

次のように全体の事は動作します:

ステップ1:Mavenはあなたの直接の依存関係、それらの依存関係、あなたの依存関係の依存関係などを含め、プロジェクトのための依存関係ツリーを構築します。

ステップ2:今、Mavenは、すべてのノードのリストを作成します。それは(3.8.2または[3.8.2]を言う)1つのバージョンだけで依存関係が発生した場合、それだけでそのバージョンを選択します。

ステップ3:Mavenのは複数のバージョンが見つかった場合、魔法が始まります。

  • すべてのバージョンは(3.8.2など)括弧なしのバージョンがある場合は、依存関係の調停原理で述べたように「最も近い」バージョンを選びます。

  • あなたには、いくつかの(またはすべてされている)バージョン([1.0.0,2.0.0]など)範囲または([1.0.0]のような)固定バージョンを持っている場合は、最初のそれは(すべての範囲/コンクリート版の交点を見つけた。なお、それは)この交差点を見つけるためにここに括弧なしのバージョンを考慮していません。

  • この交差点がnullを発見された場合、ビルドは失敗します。それがnullでない場合、それは選択した「最も近い」バージョン/コンクリートバージョン/バージョンの範囲によってさらに進みます。

  • 最寄りの定義によって、私たちはバージョン範囲/コンクリートのバージョンを取得する場合は、Mavenの選択バージョンの範囲の結果交差点で使用可能な最新のバージョンが見つかりました。

  • 最寄りの定義によって、私たちはバージョン(コンクリートのないバージョン)を取得する場合、そのバージョンが見つかったバージョンの範囲の結果交差点に存在している場合は、チェックをMavenの。そうならば、このバージョンが選択されています。そうでない場合は、Mavenの選択バージョンの範囲の結果交差点で使用可能な最新バージョン(ビルドに失敗しません)。

引用は「何もできますが、3.8.2を好む」誤解最高の状態です。Mavenのリポジトリで依存関係の欠落を補うためにしようとしない、それだけで「仲介する」のバージョン複数のバージョンは、依存関係ツリーに発見された場合。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=363125&siteId=1
おすすめ