【问题标题】:Which of the jar will be loaded in the JVM?哪个 jar 将被加载到 JVM 中?
【发布时间】:2017-06-09 02:56:38
【问题描述】:

所以假设我在 ext 文件夹中有一个不同版本的 jar,而另一个版本在 classpath 中。 jar 将被加载哪个版本?根据我的研究,由于extension classloaderclasspath 之前运行,因此将加载扩展中的库。或者它会被classpath 覆盖。如果版本相同会怎样?

【问题讨论】:

    标签: java jar classpath classloader


    【解决方案1】:

    它将使用它可以在ClassLoader 的层次结构中找到的第一个类。

    所以它会尝试从ClassLoaders的下一个序列中获取类:

    1. Bootstrap ClassLoaderBootstrap 类rt.jarjre/lib 中的几个其他重要的 jar 文件)组成。
    2. 扩展ClassLoader扩展类(扩展文件夹jre/lib/ext中的jar文件)组成。
    3. System ClassLoaderUser 类(位于定义的类路径中的类)组成。

    因此,由于您的类未在 #1 中定义,而是在 #2 和 #3 中定义,因此它可以找到的第一个类将在 #2 中,因此它将获取扩展文件夹的版本并忽略定义的那个稍后在您的类路径中。

    另见How Classes are Found

    【讨论】:

      【解决方案2】:

      这将是类级别而不是 Jar 级别。如果类(完全限定的类名)已加载到 vm,则 ext 或类路径 libs 类中的新类将被忽略。

      【讨论】:

        猜你喜欢
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 2015-10-07
        相关资源
        最近更新 更多