如何隔离同一个工程中引用的多个版本jar包?

dd5407 2017-12-20 04:54:24
目前项目中已有模块调用了低版本的开源jar包,新的模块需要引用高版本的jar包,两个版本的开源jar包互不兼容,但需要在同一个工程里使用。
查了许多资料,大致有两种办法,一种是更改开源jar包的包名或路径,然后重新编译,另一种是自定义类加载器。对于这两种方法,都有疑问。
1.第一种方法,开源jar包有许多依赖,依赖也有高低版本,需要排除所有依赖的冲突吗?
2.第二种方法,自定义类加载器,采用反射的机制,是不是我新增的模块,业务中调用方法时都需要先手动获取类,再获取方法,然后invoke执行?这比普通的调用复杂许多,而且代码也会很乱,能否实现业务里调用方式不变,做到直接从maven引入变为类加载器引入,而不用对业务的代码做改动?似乎也要考虑第三方jar包的依赖的冲突?
如果有好的解决方式,最好能给个小demo,感谢!
...全文
2921 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
技术兽 2019-12-27
  • 打赏
  • 举报
回复
其实你可以换个思路啊,你可以把低版本的jar包单独独立出来一个工程进行引入作为第二个工程,然后以接口的形式暴露给你第一个工程使用就行啦
fghqqqq 2018-04-26
  • 打赏
  • 举报
回复
[quote=引用 2 楼 dd5407 的回复:] 能不能问下是怎么解决的,我现在也遇到了这个问题,由于两个版本的方法也不一样,新版本与旧版本编译都通不过。
dd5407 2018-01-09
  • 打赏
  • 举报
回复
jar,我已经知道怎么做了,在上层没有相关依赖的类中,用自定义加载器反射生成相应对象就可以了
tianfang 2018-01-03
  • 打赏
  • 举报
回复
应用服务器,最终部署的文件是什么?

51,406

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧