jar包冲突问题

时间:2021-12-05 09:15:41
现在有两个类,一个是n多年前写的类,一个是最近开发的,导入老版本的jar包很久以前写的运行正常,导入新版本jar最近开发的运行正常,怎么能在Eclipse或者程序能指定单独一个类只调用指定的jar包吗? 或者有其他的办法

两个包合并我也尝试过了  虽然编辑的时候不出错了  但是运行时候还是报错
应该怎么解决啊?

13 个解决方案

#1


没有具体代码不好解决,如果jar包是自己公司的,改jar包代码行么?更新应该不会更改接口的。没有具体环境,不好说啊。

#2


class名称一样,路径也一样,tomcat会选择其中一个。
运行正常算你运气好,运行不正常,只有删了其中一个吧。把不正确的删掉

#3


555555555555我都要闯墙了   
这个项目是2004年开发的  jar包是chart.jar   好像还改里面的东西了 
现在连一个文档都没有   我用jfreechart1.0.8版本的jar开发  怎么融合到一起啊

#4


看看具体那个类出现问题,把那个类删了,重新打包就可以了

注意先备份操作

#5


如果不能修改新版本的jar里的代码的话,看来只有2选1了。

其实修改的话也不用修改很多地方,只需要将包名改一下就行了,在不同的包,即使类名相同,你在调用的时候也能区分开

#6


具体到哪个类的哪个方法。不用着急。应该坚持使用新版本,既然已经决定起用新的jar包的话。可以适当修改。

#7


用AOP吧,把那个旧的类屏蔽掉。

#8


jar包的运行和新旧没有关系吧,新的你就用新的类库,旧的就用旧类库,怎么都能运行,不会出现新旧版本导致不能运行的问题。把你运行时报的错误发上来,要不没法说。

#9


引用 8 楼 py330316117 的回复:
jar包的运行和新旧没有关系吧,新的你就用新的类库,旧的就用旧类库,怎么都能运行,不会出现新旧版本导致不能运行的问题。把你运行时报的错误发上来,要不没法说。


这位兄台还没理解楼主的意思吧
举个例子:

old.jar和new.jar两个jar包都引入到项目里了
old.jar有个类com.test.Help
这个类里有个方法在项目里用到了
new.jar里也有个类com.test.Help
这个类里也有个方法在项目的其他地方用到了

那么你在
import com.test.Help;
的时候,到底是导入哪个jar包里的Help类呢?JVM它不会知道你是用old.jar还是new.jar的

#10


两个jar里面都有这个类  就是类里面的方法不一样  
这两个jar我已经合并成一个了   可是我把工程生成jar之后 程序走到我新写的类就报错 狂晕

#11


你用新jar包 从新写下啊,开源就是这样的,你用人家的你就别说人家,没有规定说开源必须符合什么,不像微软 在新版本发布后会兼容老版本!开源只要是围绕jdk开发的东西,你爱用用,不爱用就不用,没人强迫!

解决的方法就是:你把老版本的jar重写一遍!

#12


jar包冲突的根本是类名及包名重复冲突,不知道楼主的jar合并是什么意思,就是简单吧两个class文件放在一起?这个当然会出问题了

#13


我也碰到这个问题,两个不同包里的两个类名字一样,分别被不同函数调用着,调用时函数分不清去调用哪个

#1


没有具体代码不好解决,如果jar包是自己公司的,改jar包代码行么?更新应该不会更改接口的。没有具体环境,不好说啊。

#2


class名称一样,路径也一样,tomcat会选择其中一个。
运行正常算你运气好,运行不正常,只有删了其中一个吧。把不正确的删掉

#3


555555555555我都要闯墙了   
这个项目是2004年开发的  jar包是chart.jar   好像还改里面的东西了 
现在连一个文档都没有   我用jfreechart1.0.8版本的jar开发  怎么融合到一起啊

#4


看看具体那个类出现问题,把那个类删了,重新打包就可以了

注意先备份操作

#5


如果不能修改新版本的jar里的代码的话,看来只有2选1了。

其实修改的话也不用修改很多地方,只需要将包名改一下就行了,在不同的包,即使类名相同,你在调用的时候也能区分开

#6


具体到哪个类的哪个方法。不用着急。应该坚持使用新版本,既然已经决定起用新的jar包的话。可以适当修改。

#7


用AOP吧,把那个旧的类屏蔽掉。

#8


jar包的运行和新旧没有关系吧,新的你就用新的类库,旧的就用旧类库,怎么都能运行,不会出现新旧版本导致不能运行的问题。把你运行时报的错误发上来,要不没法说。

#9


引用 8 楼 py330316117 的回复:
jar包的运行和新旧没有关系吧,新的你就用新的类库,旧的就用旧类库,怎么都能运行,不会出现新旧版本导致不能运行的问题。把你运行时报的错误发上来,要不没法说。


这位兄台还没理解楼主的意思吧
举个例子:

old.jar和new.jar两个jar包都引入到项目里了
old.jar有个类com.test.Help
这个类里有个方法在项目里用到了
new.jar里也有个类com.test.Help
这个类里也有个方法在项目的其他地方用到了

那么你在
import com.test.Help;
的时候,到底是导入哪个jar包里的Help类呢?JVM它不会知道你是用old.jar还是new.jar的

#10


两个jar里面都有这个类  就是类里面的方法不一样  
这两个jar我已经合并成一个了   可是我把工程生成jar之后 程序走到我新写的类就报错 狂晕

#11


你用新jar包 从新写下啊,开源就是这样的,你用人家的你就别说人家,没有规定说开源必须符合什么,不像微软 在新版本发布后会兼容老版本!开源只要是围绕jdk开发的东西,你爱用用,不爱用就不用,没人强迫!

解决的方法就是:你把老版本的jar重写一遍!

#12


jar包冲突的根本是类名及包名重复冲突,不知道楼主的jar合并是什么意思,就是简单吧两个class文件放在一起?这个当然会出问题了

#13


我也碰到这个问题,两个不同包里的两个类名字一样,分别被不同函数调用着,调用时函数分不清去调用哪个