我有一个依赖java库的两个版本 然而,我必须组合使用的大型java spring项目:
- 新版本与旧版本不向后兼容
- 两个版本使用相同的类uris
因此,我最终尝试以某种方式单独实例化两个库版本,因为默认的类加载器保持第一个实例并且事情变得疯狂。我搜索了几个小时,很多人推荐OSGi,但我不想只是为了这个小整合所有框架。此外,我尝试通过maven jarjar但我似乎没有为目标依赖jar工作(我认为他们无论如何都是混淆)。所以,我试图简单地实例化一个可以解决问题的单独的ClassLoader。你们中的任何人都知道这样做的任何微不足道的方法吗?
答案 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 :)