場合によっては、Maven Version Rangesを使用して依存関係を指定する問題がプロジェクトで発生します。Mavenでのビルド再現性と中間依存関係更新のトレード
拡張 "三段論法" はこのような何かを行く:
- のApp Xは、内部(我々の組織の)依存Y
- 依存Yは、外部依存関係Z(
org.apache.httpcomponents:httpclient
の例g:a
) - を持っています依存関係Zのプロバイダは、のバージョン番号(例えば、
httpclient
、4.5.1
〜4.5.2
の場合は、バグ修正のみを含み、APIの変更は含まないと仮定している)内で下位互換性を提供することについて非常に良いです。 - App XがDependency Zの更新を利用したい場合は、Dependency Yの新しいビルドを必要としません。
- 実際、依存関係Y1、Y2、Y3などもあります同様の機能(異なるWebサービスのクライアント)を使用し、同じバージョンの
httpclient
に依存していて、.incremental
バージョンとは無関係です(関連するバグの修正を除いて)。
したがって、等依存Y、Y1、Y2は、依存Zのそのバージョンを有することができ、アプリケーションXを可能にする(「httpclient
の任意のバージョン4.5.x
は十分であろう」と言うためには、例えばhttpclient:[4.5., 4.6)
)範囲として指定されましたその依存関係の管理バージョンを指定して(つまり、内部的にバージョン自体を依存関係Yで指定された範囲内に修正する)、依存関係Zの新しい増分バージョンに「アップグレード」する必要がありますか?
依存性Y(および関連する)は、特定のバージョンの依存性Z(最新の既知ですが、わずかに古くなる可能性があります)をun-ranged <version>4.5.inc</version>
として指定し続けているため、依存性Zが新しいバージョンでは、アプリケーションXは、次のオプションがあります
- は、再構築し、依存関係Zの
- アップデートの依存Yの述べたバージョンを(つまり、依存関係Yの優先バージョンを上書きする最新バージョンを強制)内部依存Zのバージョンを管理しますすべてのY1、Y2、Y3などを同じように実行してから、依存関係Y、Y1、Y2などのApp Xのバージョンを更新します。
しかし、 "私は依存性Zを実際に柔軟性として扱っていますが、#1の依存性Yのpom.xml
でそれを述べたくないのは不正です。
#2からの「トリクルダウンアップグレード」は現在の習慣であり、苦労しています。依存性Yファミリのコードに内部的な変更はなく、更新された依存性だけがあるため、ほとんど価値がないようです。上記の
観察:
- 「三段論法」の提案は違反しているようだ思考の学校を「バージョンを使用しない範囲」。 App Xは「再現性を構築する」がありますが、依存性Yは必ずしも限定されているわけではありませんが、限られた範囲では許容されるかもしれません。
- 代替1は、私が出会った「バージョン範囲を使用しない」投稿によって支持されているようです。
- 代替案2(現在の方法)は、App XとDependency Yの両方で「再現性」を確保するために必要な悪ですか?
したがって、重要な質問は、「トリクルダウンアップグレード」と「再現性の構築」の間にこの緊張感を感じないように、私が見落としているオプションや代替品があることです。
理想的には、「バージョンg:a:maj.min.inc
の依存関係Yを作成しますが、推移性はあいまいで、下流にはg:a:maj.min.?
バージョンを受け入れます」という記述が理想的です。 Yさんは唯一のXまたは同様の文脈で使用されている場合は、私は二つのオプションを見ることができます
これは良い質問です...あなたが言うように、2つのアプローチがありますが、どのようにそれらを第3のものにマージできるかはわかりません。ビルドで使用される依存関係と、消費者の推移的依存関係になる依存関係は同じです...あなたはYからZ依存関係を取り除くことができますが、XはZに完全に依存しますが、 ... – Tunaki