【发布时间】:2017-06-09 02:56:38
【问题描述】:
所以假设我在 ext 文件夹中有一个不同版本的 jar,而另一个版本在 classpath 中。 jar 将被加载哪个版本?根据我的研究,由于extension classloader 在classpath 之前运行,因此将加载扩展中的库。或者它会被classpath 覆盖。如果版本相同会怎样?
【问题讨论】:
标签: java jar classpath classloader
所以假设我在 ext 文件夹中有一个不同版本的 jar,而另一个版本在 classpath 中。 jar 将被加载哪个版本?根据我的研究,由于extension classloader 在classpath 之前运行,因此将加载扩展中的库。或者它会被classpath 覆盖。如果版本相同会怎样?
【问题讨论】:
标签: java jar classpath classloader
它将使用它可以在ClassLoader 的层次结构中找到的第一个类。
所以它会尝试从ClassLoaders的下一个序列中获取类:
ClassLoader 由 Bootstrap 类(rt.jar 和 jre/lib 中的几个其他重要的 jar 文件)组成。ClassLoader由扩展类(扩展文件夹jre/lib/ext中的jar文件)组成。ClassLoader 由 User 类(位于定义的类路径中的类)组成。因此,由于您的类未在 #1 中定义,而是在 #2 和 #3 中定义,因此它可以找到的第一个类将在 #2 中,因此它将获取扩展文件夹的版本并忽略定义的那个稍后在您的类路径中。
【讨论】:
这将是类级别而不是 Jar 级别。如果类(完全限定的类名)已加载到 vm,则 ext 或类路径 libs 类中的新类将被忽略。
【讨论】: