回答
可能不是最简单的方法,但您可以查看该进程已打开的文件并从中确定。
如果您使用的是Windows,则可以使用Process Explorer查看该进程在任何给定时间打开的文件,或Process Monitor在运行时观察文件系统访问。会有很多噪音,但你可以从那里弄清楚。
如果你在Mac上,我认为内置的活动监视器可以给你一个打开的文件列表。可悲的是,我不知道你在Linux中使用的命令。
lsof -p PID - 将在Linux中列出针对特定进程的文件 – Cogsy 2009-06-04 13:43:37
用-verbose:class
参数调用java
可执行文件。这将产生象输出:
[加载从文件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';应该减少噪音 – Herms 2009-06-04 13:43:57
尝试这段代码:
//Get the System Classloader
ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();
//Get the URLs
URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();
System.out.println("CURRENT CLASSPATH :");
for(int i=0; i< urls.length; i++){
System.out.println(urls[i].getFile());
}
System.out.println("END OF CLASSPATH");
System.getProperty("java.class.path");
这个答案看似正确 - 因为JVM(或者至少Sun的?)将从包含它的类路径上的第一个位置加载类;按照类路径的顺序 – 2009-06-04 13:55:20
这只有在您可以控制代码时才有效。这可能就是这种情况,但我不确定。 – Herms 2009-06-04 13:58:35
知道代码是否来回并不那么容易正在使用的JAR只有在你的代码调用该jar被执行时才是可能的。被覆盖)。直到你的代码没有被覆盖,很难知道你的应用程序类路径上的jar是否被使用。
为此,您可能需要正确的junit测试用例,它可以覆盖整个代码,然后您可以使用Class Dependency Analyzer工具。
这是一种尝试看东西。您可以尝试逐个删除JAR并检查应用程序是否有效,但junit案例是进行此检查的最佳选择。
你想从应用程序内部分析,还是从应用程序外部进行分析? – rich 2009-06-04 13:52:06
external.otherwise我可以检查类路径。 – omg 2009-06-04 16:58:45