Java 哪个jar将被加载到JVM中?
因此,假设我在Java 哪个jar将被加载到JVM中?,java,jar,classpath,classloader,Java,Jar,Classpath,Classloader,因此,假设我在ext文件夹中有一个版本不同的jar,另一个版本在类路径中。jar将加载哪个版本?根据我的研究,由于扩展类加载器在类路径之前运行,因此将加载扩展中的库。或者它将被类路径覆盖。如果版本相同会发生什么呢?它将使用在类加载器的层次结构中可以找到的第一个类 因此,它将尝试从下一个ClassLoaders序列中获取类: BootstrapClassLoader由Bootstrap类组成(rt.jar和jre/lib中的几个其他重要的jar文件) 扩展ClassLoader由扩展类组成(jar
ext
文件夹中有一个版本不同的jar,另一个版本在类路径中。jar将加载哪个版本?根据我的研究,由于扩展类加载器
在类路径
之前运行,因此将加载扩展中的库。或者它将被类路径
覆盖。如果版本相同会发生什么呢?它将使用在类加载器的层次结构中可以找到的第一个类
因此,它将尝试从下一个ClassLoader
s序列中获取类:
BootstrapClassLoader
由Bootstrap类组成(rt.jar
和jre/lib
中的几个其他重要的jar
文件)
扩展ClassLoader
由扩展类组成(jar
扩展文件夹jre/lib/ext
中的文件)
系统类加载器
由用户类(位于定义的类路径中的类)组成
因此,由于您的类不是在#1中定义的,而是在#2和#3中定义的,因此它可以找到的第一个类将在#2中,因此它将获得扩展文件夹的版本,并忽略稍后在类路径中定义的版本
另请参见它将是类级别而不是Jar级别。如果类(完全限定类名)已加载到vm,则将忽略ext中的新类或类路径libs类