java从两个冲突的JAR导入类时,使用哪一个?
在Java中,我最近遇到了一个案例,我得到了两个不同的JAR,每个JAR定义了一个类。问题是其中一个jar已经过时,并且所讨论的类缺少一个存在于一个jar而不是另一个jar中的方法
因此,我得到一个错误,代码中使用的方法找不到。我最终能够通过移除旧罐子来解决这个问题,这样它就导入了正确的罐子
许多人使用相同的代码(使用相同的两个相互冲突的导入jar),并且没有这个问题。所以,他们一定是导入了最新的jar
我的问题是:是什么导致我导入一个罐子而不是另一个?什么样的逻辑决定了哪个是“使用的”
谢谢
# 1 楼答案
看看你的
CLASSPATH
。你的jar文件在CLASSPATH
上的显示顺序是什么如果没有显式地设置
CLASSPATH
变量(或命令行参数,或者框架如何查找类),那么请将其设置为使所需的类更早出现# 2 楼答案
类路径决定顺序的方式与path决定如果有多个同名程序将运行哪个程序的方式相同
你可能会遇到奇怪的bug,但大多数情况下,拥有多个版本的jar并不是问题(这意味着它可能已经存在了一段时间,而且很难测试)
# 3 楼答案
根据订单。第一个将被使用,第二个将开始引发问题
确保不要包含同一类的不同版本。因此,你可能会遇到奇怪的虫子