1

非常に大きなJavaSpringプロジェクトのごく一部に、依存関係Javaライブラリの2つのバージョンがありますが、これをしばらくの間組み合わせて使用​​する必要があります。

-新しいバージョンは古いバージョンと下位互換性がありません

-両方のバージョンが同じクラスのURIを使用します

したがって、デフォルトのクラスローダーが最初のインスタンスを保持し続け、事態が悪化しているため、どういうわけか両方のライブラリバージョンを別々にインスタンス化しようとすることになりました。私は数時間少し検索しました。多くの人がOSGiをお勧めしますが、このほんの少しのためだけにそのフレームワークをすべて統合したくはありません。また、mavenを介してjarjarを試しましたが、ターゲットの依存関係jarでは機能しなかったようです(とにかく難読化されていると思います)。だから、私はそのトリックを実行できる別のClassLoaderを単純にインスタンス化しようとしています。それを行うための簡単な方法を知っている人はいますか?

4

2 に答える 2

0

フレームワークの使用法を、インターフェースで記述できる小さな関数セットにカプセル化できますか?

もしそうなら、そしてあなたがアプリケーションサーバー環境にいるなら、あなたはこのようなことをすることができます:

インターフェイスを定義し、2つのファクトリメソッドを使用してアプリサーバーのlib-Folderに配置します。アプリはバージョン1のWebArchive1Frameworkに移動し、WebArchive2に移動してlibからfactory-method1にデータを入力します-バージョン2のFolder FrameworkはWebArchive3に移動し、lib-Folderからfactory-method2にデータを入力します

--> lib
public interface MyInterface {
   // do Stuff
}

public class MyFactory {
  private static MyInterface v1;
  private static MyInterface v2;

  public MyInterface getV1() {...}
  public MyInterface getV1() {...}
}

--> WebArchive2
MyFactory.setV1(new Lib());

--> WebArchive3
MyFactory.setV2(new Lib());
于 2012-05-09T11:11:33.637 に答える
0

気にしないでください、問題は簡単な方法で修正されました。私はライブラリの作者に連絡し、彼らは私のために古いバージョンのパッケージをリファクタリングしました。したがって、クラスローダーのハックはもう必要ありません:)

于 2012-05-14T13:52:57.810 に答える