依赖多个版本的同一个jar包,有办法可以做到多版本并存么?

依赖多个版本的同一个jar包,有办法可以做到多版本并存么?

比如以前的代码依赖poi 3.9

新增的功能依赖poi 3.16,但是会对以前的代码有破坏,如何处理?

阅读 16.9k
8 个回答

在JVM通过包名+类名唯一确定一个类,一个类的定义只有一种,所以不可能存在多版本同一个jar包共存的方法。

可能很多人鄙视我,但是这是一个维护项目,以前的代码估计至少有5年了,经过了无数人的手,而且没有单元测试,重构风险很大。添加的新功能仅仅是一点点小改动,我觉得并不值去重构。

我解决的方法是把新功能打包成一个可以命令行执行的Jar包,通过传入参数来完成调用,通过返回值来判断是否执行成功。

java -jar poitest.jar xxxx.docx  xxxx.docx

即使能 hack 出来,我也不想这么做。重构吧。

并不能多版本共存,那只会冲突。直接更新旧代码咯,能咋办

如何处理?改以前旧版本的代码啊?

个人建议,在旧版本代码中,将旧版本代码重新拉出一个分支,修改旧版本代码,将poi的代码升级为3.9版本让其可以适配

不行,只能指定一个版本,否则会产生jar包冲突问题

新手上路,请多包涵

博主说“在JVM通过包名+类名唯一确定一个类”,我认为是错的,JVM 通过类加载器和这个类的全限定名确定唯一性

新手上路,请多包涵

使用jarjar修改新引入的版本的包名,可以参考我这篇博客:Maven 同一依赖多版本共存,虽然这个问题是17年提的,我这21年才回答,不过还是给后面的同志指条路吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏