假设我在 ext
文件夹中有一个不同版本的 jar,而另一个版本位于 classpath
中。将加载哪个版本的 jar?根据我的研究,由于扩展类加载器
在classpath
之前运行,因此将加载扩展中的库。或者它会被 classpath
覆盖。如果版本相同会发生什么?
最佳答案
它将使用它可以在ClassLoader
层次结构中找到的第一个类。
因此它将尝试从下一个ClassLoader
序列中获取类:
- Bootstrap
ClassLoader
由 Bootstrap 类(rt.jar
和其他几个重要的jre/lib
中的 >jar - 扩展
ClassLoader
由扩展类组成(扩展文件夹jre中的
)。jar
文件/lib/ext - 系统
类加载器
由用户类(位于定义的类路径中的类)组成。
因此,由于您的类未在 #1 中定义,而是在 #2 和 #3 中定义,因此它可以找到的第一个类将在 #2 中,因此它将获取扩展文件夹的版本,并忽略已定义的版本稍后在您的类路径中。
关于java - 哪个 jar 会被加载到 JVM 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41825998/