Apache-commons-collections 2.1 に依存するサードパーティ ライブラリに依存するモジュール X があります。
モジュール X では、2.1 よりもいくつかのメソッドが追加された最新の apache-commons-collections 3.0 を使用したいと考えています。3.0 に依存関係を追加すると、クラス ローダーがクラスパスで最初に検出したクラスを取得するだけなので、問題が発生すると思います。この問題を回避する良い方法はありますか?
ありがとう、S
モジュール性のための追加のソリューション (Java EE の EAR や OSGi など) がなければ、本当に良い方法はありません。ただし、このサードパーティのライブラリを直接使用する単純な Web (またはそうでない) モジュールについて質問していると思います。この競合は手動で解決する必要があります。実際、Maven は の 2 つのバージョンを提供せずcommons-collections
、クラスローダーの解決に依存しますが、依存関係グラフを解決し、POM の宣言を念頭に置いてより良いと思われるバージョンを選択します。つまり、モジュール X でcommons-collections
バージョン 3.0 の依存関係を宣言すると、そのバージョンが使用されます。これは、この宣言が一部のサードパーティ ライブラリの依存関係よりも重要であるためです。
これは Java プラットフォーム自体の深刻な問題であり、有名な JAR 地獄のような問題を引き起こします。commons-collections
残念ながら、あなたとサードパーティのライブラリの両方を満たすバージョンを選択して宣言するのはあなたの問題です。
プロジェクトに3.0への依存関係を追加するだけで、古いバージョンの2.1よりも優先されます。明示的にするには、除外を追加できます。いずれの場合も、依存関係プラグインと分析およびツリーの目標を使用して、何が起こっているかを確認してください。
簡単に言えば...これは常に発生し、問題はなく、どのような場合でも、何が発生するかを制御できます。