如何分析Java程序中使用的jar文件?

omg*_*omg 7 java classpath

假设有一个名为callme.jar的jar文件

它位于几个目录中,

如何分析在运行时使用哪一个?

mat*_*t b 29

java使用-verbose:class参数调用可执行文件.这将产生如下输出:

[从文件加载org.apache.log4j.helpers.ThreadLocalMap:/ C:/.../ 1.2.14/log4j-1.2.14.jar]
[从文件中加载org.apache.commons.cli.Option:/ C :/.../公共-CLI-1.2.jar]

  • 如果为它加载的每个类输出,你可能想将它传递给grep:java -verbose:class ... | grep'callme.jar'; 应该减少噪音 (3认同)

Her*_*rms 3

可能不是最简单的方法,但您可以查看进程打开了哪些文件并从中确定。

如果您使用的是 Windows,则可以使用Process Explorer来查看进程在任何给定时间打开了哪些文件,或者使用Process Monitor来观察文件系统运行时的访问情况。会有很多噪音,但你可以从那里弄清楚。

如果您使用的是 Mac,我认为内置的活动监视器可以为您提供打开文件的列表。遗憾的是我不知道你在 Linux 中使用的命令。

  • lsof -p PID - 将列出 Linux 中特定进程打开的文件 (4认同)