7

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

它位于几个目录中,

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

4

5 回答 5

30

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

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

于 2009-06-04T13:41:31.547 回答
3

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

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

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

于 2009-06-04T13:40:09.710 回答
2
System.getProperty("java.class.path");
于 2009-06-04T13:46:45.623 回答
1

试试这段代码:

    //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");
于 2009-06-04T13:41:44.793 回答
0

要知道是否正在使用 JAR 中的一段代码并不是那么容易,只有在调用该 jar 的代码正在执行(即被覆盖)时才有可能。直到您的代码未被覆盖为止,很难知道您的应用程序类路径上的 jar 是否正在使用。

为此,您可能需要正确的 junit 测试用例,它可以覆盖您的整个代码,然后您可以使用类依赖分析器工具。

这是一种尝试和观察的事情。您可以尝试逐个删除 JAR 并检查应用程序是否有效,但 junit 案例是进行此检查的最佳选择。

于 2016-01-12T07:18:27.583 回答