本文为博主原创,转载请注明出处:
jdk8 可以通过 -XX:+TraceClassPaths 参数进行查看jar包的加载顺序
jdk11 可以通过 -Xlog:class+path=info 参数进行查看jar包的加载顺序
idea 启动查看配置方式如下:
进行服务启动之后,会在控制台打印jvm加载时的classpath参数;示例如下:
在控制台 搜索 java.class.path 就能看到具体的配置;java.class.path 的顺序就是 jvm 加载class以及 jar包的顺序;排在前面的会优先加载;
当我们启动一个tomcat的服务的时候,jar包和claess文件是是以怎么样的顺序被加载进来的?
加载顺序:
1. $java_home/lib 目录下的java核心api
2. $java_home/lib/ext 目录下的java扩展jar包
3. java -classpath/-Djava.class.path所指的目录下的类与jar包
4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载
5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载
6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载
7. 我们的项目路径/WEB-INF/classes下的class文件
8. 我们的项目路径/WEB-INF/lib下的jar文件
在同一个文件夹下,jar包是按顺序从上到下依次加载
由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同的class文件不再同一个jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。
设置多个类路径;多个类路径以分号分隔
D:> java -classpath C:\java\MyClasse1;C:\java\MyClass2 com.yiibai.MainApp
设置多个jar的路径顺序:多个jar使用 英文冒号进行分割
-classpath /data/tomcat_8081/bin/bootstrap.jar:/data/tomcat_8081/bin/tomcat-juli.jar
String javaClassPath = System.getProperty("java.class.path");
log.error("----- {}",javaClassPath);