寻求可列出运行中Java应用已加载模块及Jar路径的工具
解决运行中Java应用已加载模块及实际使用Jar路径的工具推荐
下面几个工具和方法可以帮你精准获取这些信息,都是实际开发中常用的:
1. JDK自带命令行工具:jcmd
这是最方便的选择,不用额外安装任何东西,只要你的环境配置了JDK就行:
- 第一步先找到目标Java进程的PID,执行
jps命令就能列出所有本地Java进程的PID和对应名称; - 查看已加载的模块列表:运行
jcmd <PID> Module.list,会输出所有模块的名称、版本以及加载位置; - 确认实际使用的Jar路径:如果想验证某个类来自哪个Jar,执行
jcmd <PID> VM.describe_class <完整类名>(比如jcmd 1234 VM.describe_class com.example.MyClass),输出内容里的Location字段就是该类所在Jar的绝对路径,直接定位到实际被加载的那个文件; - 也可以用
jcmd <PID> VM.classpath查看应用配置的完整类路径,但这个会列出所有配置的路径,不一定是实际加载的,所以优先用上面的类描述命令更准确。
2. JDK自带可视化工具:jvisualvm
如果更喜欢图形界面操作,这个工具上手更直观:
- 在JDK的bin目录下找到
jvisualvm.exe(Windows)或jvisualvm(Linux/Mac)启动; - 在左侧「应用程序」列表里找到你的目标Java进程并双击打开;
- 查看模块信息:切换到「模块」标签,就能看到所有已加载模块的详细内容,包括模块对应的文件路径;
- 定位Jar路径:切换到「类」标签,搜索目标Jar里的任意类,右键该类选择「显示来源」,弹窗会直接展示这个类实际加载自哪个Jar包的绝对路径。
3. Arthas 诊断工具
这是阿里开源的Java诊断工具,功能非常全面,对付复杂场景特别好用:
- 先下载arthas-boot.jar(本地直接运行即可,无需额外安装);
- 执行
java -jar arthas-boot.jar,然后选择目标进程的序号进入交互环境; - 查看已加载模块:输入
module list命令,会输出模块名称、加载器、对应路径等详细信息; - 确认类对应的Jar路径:输入
sc -d <完整类名>(比如sc -d com.example.MyClass),结果里的source字段就是该类所在Jar的路径,精准指向实际被使用的那个Jar文件。
这些工具都能完美解决你遇到的「同一Jar存在多路径时确定实际加载Jar」的问题,根据自己的使用习惯选择就行~
内容的提问来源于stack exchange,提问作者tajihiro
相关产品推荐
相关产品推荐

