2012-04-13 3 views
0

モジュールXは、サードパーティのライブラリに依存しています。これは、apache-commons-collections 2.1に依存しています。Jarの2つのバージョンへの依存

モジュールXでは、2.1よりもいくつかの追加メソッドがある最新のapache-commons-collections 3.0を使いたいと思います。 3.0に依存関係を追加すると、クラスローダーはクラスパスで最初に見つかったクラスを取得するだけなので、これが問題になります。この問題を回避する良い方法はありますか?

おかげで、 S

答えて

0

はちょうどあなたのプロジェクトに3.0に依存関係を追加し、それが2.1以前のバージョンの上にそれを好むでしょう。明示的にするために、除外を追加することができます。いずれにせよ、依存関係のプラグインと分析とツリーの目標を使用して、何が起きているのかを確認してください。

短いストーリー...これはいつも起こり、どんな場合でも何が起こるかを制御できます。

1

IMHO 実際には(Java EEのEARやOSGiのような)モジュール化のための追加の解決策なしに良い方法です。しかし、あなたはこの第三者のlibを直接使用する単純なWeb(またはそうでない)モジュールについて質問していると思います。私はこの矛盾を手動で解決しなければならないのではないかと心配しています。実際には、Mavenはcommons-collectionsの2つのバージョンを提供せず、クラスローダーの解像度に依存するのではなく、依存関係のグラフを解決し、あなたのPOMの宣言を念頭に置いたほうが良いと思われるバージョンを選びます。つまり、モジュールXのcommons-collectionsバージョン3.0への依存関係を宣言すると、この宣言はサードパーティのlibの依存関係よりも重要なので、そのバージョンが使用されます。

これは、Java Platform自体の深刻な問題であり、有名なJAR地獄のような問題があります。残念ながら、あなたとサードパーティの両方のlibを満たすcommons-collectionsバージョンを選択して宣言することは問題です。

関連する問題