Test1 と Test2 の 2 つの Java プロジェクトがあります。Test1 には、eclipse Java ビルド パスにライブラリ lib が追加されています。Test2 には、ビルド パスに追加された jar があります。
Test1 Test2
/src /src
lib Referenced Libraries
x-1.1.jar a.jar
y.jar x-1.2
z
Test1 のコードは、x-1.1.jar に依存する y.jar の関数/クラスを呼び出します。jar のソースがないため、x-1.1.jar のどの関数/クラスが y.jar で使用されているかわかりません。同様に、Test2 は、jar の x-1.2 バージョンに依存する a.jar の z パッケージの関数/クラスを呼び出します。
これで、Test1 と Test2 の両方のプロジェクトが必要な Test プロジェクトができました。
Test
/src
Test1 code
Test2 code
some other code which uses Test1 as well as Test2 libraries
lib
x-1.1.jar
y.jar
Referenced Libraries
a.jar
x-1.2
z
Test プロジェクトを実行すると、jar-hell の状況に陥ります。ここで私の研究で使用される 2 つのアプローチは次のとおりです。
- クラスパス: このアプローチの問題は、Test1 と Test2 の両方のライブラリ/jar が eclipse Java ビルド パスに追加されるため、x.jar の最初にロードされたバージョンのみがアクセスされ、クラスローダーを使用しても Test2 コードが壊れることです。
- osgi: アプローチの問題は、プロジェクトによって参照されているものではなく、osgi バンドルから Test1 および Test2 の src フォルダー内のパッケージのみをエクスポートできることです。しかし、Test プロジェクトには、Test1 および Test2 ライブラリを使用するコードがあります。
私が十分に明確であることを願っています。どんな助けでも大歓迎です。前もって感謝します。
質問にさらに情報を追加する: 私のプロジェクトでは、異なる jar ファイルをバンドルした 2 つの異なる Java SDK を使用する必要があります。矛盾するものは次のとおりです。
jar file Test1 ver Test2 ver
org.apache.commons.codecs 1.3 1.6
org.apache.commons.logging 1.1.1 1.1.1
org.apache.log4j 1.2.7 1.2.15
httpclient 4.1.1 4.0.3
httpcore 4.1 4.1.4
これを行うにはどのような方法が考えられますか?