10

私はプロジェクト X を持っています。このプロジェクトは、依存関係階層でかなり多くの競合する依存関係を示しています (Eclipse の依存関係階層ビューに表示されているように)。次のようなものがたくさんあります。

clojure: 1.3.0 (omitted for conflict with 1.4.0) [compile]

これは通常、X で使用される 2 つのライブラリが、他のライブラリの 2 つの異なるバージョンを指定しているために発生します。つまり、共有の推移的な依存関係のために競合が発生しています。多くの場合、競合はサードパーティのライブラリにあり、直接制御することはできません。

幸いなことに、現在はすべて正常にビルドおよび実行されていますが、この状況が将来問題を引き起こす可能性があるのではないかと心配しています。

これは私が心配すべき問題ですか? もしそうなら、私はそれについて何をすべきですか?

4

4 に答える 4

5

はい、そのような対立は深刻な場合があります。

バージョンを相互に比較するときに、依存関係に互換性のない変更があるかどうかはわかりません(マイナーバージョンを比較するときはないはずですが、誰が正確に知っていますか?)。あるいは、ある依存関係が別の依存関係のバグのある振る舞いに依存しているのかもしれません。このバグが修正された場合はどうなりますか?バグに応じて、その1つのモジュールは正しく実行されません。

競合する依存関係を除外する必要があります(より低いバージョンを除外する可能性が高くなります)。入力する除外ごとに、除外されたバージョンと現在使用されているバージョンの間に互換性のない変更があるかどうかを確認する必要があります。その場合、そのような変更の影響を受けるかどうか、そのモジュールに依存する依存関係を確認する必要があります。

于 2012-10-23T08:47:02.287 に答える
3

新しいバージョンがMavenによって選択されている場合、ほとんどの場合、これは問題ありません。

メジャーバージョン(最初の番号)の違いと競合が発生した場合、または新しいバージョンが省略された場合は、心配する必要があります。Unitstestsはこれらの問題を見つけるのに大いに役立ちますが、多くの場合、EclipseプロジェクトとMavenの依存関係は微妙に異なります(デバッグスコープなど)。唯一の本当の保護は統合テストのようです。

于 2012-10-23T08:47:12.993 に答える
2

何が起こるかを正確に確認できないため、これは深刻な問題になる可能性があり、これは悪いことです。Maven構成を使用する大きなポイントは、何が起こるか、使用される依存関係が何であるかを明確にすることだと思います。

それについて何をすべきかについては、私の他の回答を参照してください-使用するバージョンと除外するバージョンを明示的に構成することにより、それらを修正するようにプッシュする必要があります.maven-enforcerプラグインは、DependencyConvergence rule . これは、競合する推移的な依存関係からあなたを守るためにあります。

于 2012-10-23T12:12:02.270 に答える