【问题标题】:When importing classes from two conflicting jars, which one is used?从两个冲突的 jar 中导入类时,使用哪一个?
【发布时间】:2012-05-06 10:11:10
【问题描述】:

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

所以,我收到一个错误,即找不到代码中使用的方法。我最终能够通过删除旧 jar 来解决这个问题,以便它导入正确的。

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

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

谢谢!

【问题讨论】:

    标签: java import jar


    【解决方案1】:

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

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

    【讨论】:

    • 有一种叫做 OSGi 的东西可以解决这个问题。 OSGi 允许您轻松定义 JAR 之间的依赖关系,因此您可以在 JAR 中拥有给定类的各种版本,并选择要使用的。
    • @PiotrKochański - OSGi 可能是一个矫枉过正 :-)
    • @mrab 通常是:),除非你想写应用服务器
    【解决方案2】:

    类路径确定顺序的方式与 PATH 确定将运行哪个程序的方式相同,如果您有多个同名程序。

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

    【讨论】:

      【解决方案3】:

      看看你的CLASSPATH。你的 jar 文件在CLASSPATH 上出现的顺序是什么?

      如果您没有显式设置 CLASSPATH 变量(或命令行参数,或者您的框架会找到类),那么请以您想要的类更早出现的方式进行设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-25
        • 2012-11-05
        • 1970-01-01
        • 2012-02-07
        • 2017-09-01
        • 2022-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多