Java 从两个冲突的JAR导入类时,使用哪一个?

Java 从两个冲突的JAR导入类时,使用哪一个?,java,import,jar,Java,Import,Jar,在Java中,我最近遇到了一个案例,我得到了两个不同的JAR,每个JAR定义了一个类。问题是其中一个jar已经过时,并且所讨论的类缺少一个存在于一个jar而不是另一个jar中的方法 因此,我得到一个错误,代码中使用的方法找不到。我最终能够通过移除旧罐子来解决这个问题,这样它就导入了正确的罐子 许多人使用相同的代码(使用相同的两个相互冲突的导入jar),并且没有这个问题。所以,他们一定是导入了最新的jar 我的问题是:是什么导致我导入一个罐子而不是另一个?什么样的逻辑决定了哪个是“使用的” 谢谢

在Java中,我最近遇到了一个案例,我得到了两个不同的JAR,每个JAR定义了一个类。问题是其中一个jar已经过时,并且所讨论的类缺少一个存在于一个jar而不是另一个jar中的方法

因此,我得到一个错误,代码中使用的方法找不到。我最终能够通过移除旧罐子来解决这个问题,这样它就导入了正确的罐子

许多人使用相同的代码(使用相同的两个相互冲突的导入jar),并且没有这个问题。所以,他们一定是导入了最新的jar

我的问题是:是什么导致我导入一个罐子而不是另一个?什么样的逻辑决定了哪个是“使用的”


谢谢

基于顺序。第一个将被使用,第二个将开始引起问题


确保不包含同一类的不同版本。因此,您可能会遇到奇怪的bug。

查看您的
类路径。jar文件在
类路径上的显示顺序是什么


如果没有显式地设置
CLASSPATH
变量(或命令行参数,或框架如何查找类),则应将其设置为使所需的类显示得更早

类路径决定顺序的方式与path决定在有多个同名程序时运行哪个程序的方式相同


您可能会遇到奇怪的bug,但大多数情况下,拥有一个jar的多个版本并不是问题(这意味着它可能已经存在了一段时间,并且很难测试)

有一种叫做OSGi的方法可以解决这个问题。OSGi允许您轻松地定义JAR之间的依赖关系,因此您可以在JAR中拥有给定类的各种版本,并选择要使用的版本。@Piotrkochanski-OSGi可能是一个滥杀:-)@mrab通常是:-),除非您想编写应用程序服务器