java - 哪个 jar 会被加载到 JVM 中?

标签 java jar classpath classloader

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

最佳答案

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

因此它将尝试从下一个ClassLoader序列中获取类:

  1. Bootstrap ClassLoaderBootstrap 类(rt.jar 和其他几个重要的 jre/lib 中的 >jar 文件)。
  2. 扩展ClassLoader扩展类组成(扩展文件夹jre中的jar文件/lib/ext)。
  3. 系统类加载器用户类(位于定义的类路径中的类)组成。

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

另请参阅How Classes are Found

关于java - 哪个 jar 会被加载到 JVM 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41825998/

相关文章:

java - 如何判断app是否被 "Share-Via"调用?

Java类路径问题

java - 在 Windows 上的命令行中运行 jar(类路径)

java - Tomcat6 中的类路径资源(适用于 Jetty)

java - 除非数字是数学整数,否则以两位小数打印 float

java - 每个循环将数字添加到数组

java - CentOS 上的 OpenOffice、JOD Converter、Docsplit 问题

java - 图像适合 jar 并与其一起工作,但在使用 String[] 数组存储图像名称时则不然

java - 打开 .JAR 文件中的 HTML 文件

java - 在项目中找到未使用的jar