哪个jar会加载到JVM中?

时间:2017-01-24 10:39:03

标签: java jar classpath classloader

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

2 个答案:

答案 0 :(得分:1)

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

所以它会尝试从下一个ClassLoader s序列中获取该类:

  1. Bootstrap ClassLoader Bootstrap类rt.jar以及{{1}中的其他几个重要jar文件组成}})。
  2. 扩展程序jre/lib 扩展程序类(扩展文件夹ClassLoader中的jar个文件)组成。
  3. 系统jre/lib/ext 用户类(定义在类路径中的类)组成。
  4. 因为你的类没有在#1中定义,而是在#2和#3中定义,它可以找到的第一个类将在#2中,所以它将获得扩展文件夹的版本并且只是忽略定义的那个稍后在你的类路径中。

    另见How Classes are Found

答案 1 :(得分:1)

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