如何隔离同一个工程中引用的多个版本jar包?
目前项目中已有模块调用了低版本的开源jar包,新的模块需要引用高版本的jar包,两个版本的开源jar包互不兼容,但需要在同一个工程里使用。
查了许多资料,大致有两种办法,一种是更改开源jar包的包名或路径,然后重新编译,另一种是自定义类加载器。对于这两种方法,都有疑问。
1.第一种方法,开源jar包有许多依赖,依赖也有高低版本,需要排除所有依赖的冲突吗?
2.第二种方法,自定义类加载器,采用反射的机制,是不是我新增的模块,业务中调用方法时都需要先手动获取类,再获取方法,然后invoke执行?这比普通的调用复杂许多,而且代码也会很乱,能否实现业务里调用方式不变,做到直接从maven引入变为类加载器引入,而不用对业务的代码做改动?似乎也要考虑第三方jar包的依赖的冲突?
如果有好的解决方式,最好能给个小demo,感谢!