1

我在一个非常大的 java spring 项目的一小部分中有两个版本的依赖 java 库,我真的必须结合使用一段时间,但是:

- 新版本不向后兼容旧版本

- 两个版本都使用相同的类 uri

因此,我最终试图以某种方式分别实例化两个库版本,因为默认类加载器一直保留第一个实例,事情变得疯狂。我搜索了几个小时,很多人推荐 OSGi,但我不想仅仅为了这点就集成所有的框架。另外,我通过 maven 尝试了 jarjar,但我似乎没有为目标依赖 jar 工作(我认为它们无论如何都被混淆了)。所以,我试图简单地建立一个单独的 ClassLoader 来解决这个问题。你们中有人知道这样做的简单方法吗?

4

2 回答 2

0

没关系,问题很容易解决。我联系了图书馆作者,他们为我重构了他们的旧版本包。所以不再需要类加载器黑客了:)

于 2012-05-14T13:52:57.810 回答
0

您能否将框架的使用封装到可以由接口描述的一小组功能中?

如果是这样,并且如果您处于应用程序服务器环境中,则可以执行以下操作:

定义您的接口并使用两个工厂方法将其放入应用服务器的 lib-Folder 中。您的应用程序转到版本 1 中的 WebArchive1 框架转到 WebArchive2 并从您的 lib-Folder 中填充 factory-method1 版本 2 中的框架转到 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 回答