有时在一个应用中,会依赖很多的jar包,难免会出现引用不同jar包中的同名类,或者jar包冲突,这时搞清楚:
- JVM启动时加载了哪些jar包
- 或者一个类来自哪个jar中来就非常重要了。
一、查看JVM加载了哪些jar包
启动JVM,通过如下命令获取进程号:
jps -lm
其中参数:
-l
:输出main所在类的全名,如果执行的是jar包,则输出jar包路径
-m
:输出jvm进程启动时传递给main函数的参数jps还有参数
-v
:输出jvm进程启动时JVM参数。使用如下命令:
jinfo + 进程号
找到打印出的信息中的
java.class.path
属性值,既是jvm进程启动时加载的jar包。
二、查看具体的class从哪个jar保重加载的
在JVM启动时,加上如下参数:
-verbose:class
即可在console控制台上看到加载的class是从哪个jar中来的,示例如下:
[Loaded java.util.regex.Pattern from /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/rt.jar]