多次实例化默认类加载器

时间:2012-05-09 08:51:56

标签: java spring classloader

我有一个依赖java库的两个版本 然而,我必须组合使用的大型java spring项目:

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

- 两个版本使用相同的类uris

因此,我最终尝试以某种方式单独实例化两个库版本,因为默认的类加载器保持第一个实例并且事情变得疯狂。我搜索了几个小时,很多人推荐OSGi,但我不想只是为了这个小整合所有框架。此外,我尝试通过maven jarjar但我似乎没有为目标依赖jar工作(我认为他们无论如何都是混淆)。所以,我试图简单地实例化一个可以解决问题的单独的ClassLoader。你们中的任何人都知道这样做的任何微不足道的方法吗?

2 个答案:

答案 0 :(得分:0)

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

如果是这样,并且如果您在Application-Server环境中,则可以执行以下操作:

定义您的界面并使用两个工厂方法将其放到app-server的lib-Folder中。 您的应用程序转到WebArchive1 版本1中的框架转到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());

答案 1 :(得分:0)

没关系,问题解决了简单的方法。 我联系了图书馆的作者,他们为我重构了他们的旧版本包。 所以不再需要类加载器hacks :)