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

时间:2009-06-04 13:36:32

标签: java classpath

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

它位于多个目录中,

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

5 个答案:

答案 0 :(得分:28)

使用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]

答案 1 :(得分:3)

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

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

如果您使用的是Mac,我认为内置的Activity Monitor可以为您提供打开文件的列表。可悲的是,我不知道你在Linux中使用的命令。

答案 2 :(得分:2)

System.getProperty("java.class.path");

答案 3 :(得分: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");

答案 4 :(得分:0)

要知道是否正在使用来自JAR的代码片段,只有在调用该jar的代码正在执行(即被覆盖)时,才能实现这一点并不容易。直到你的代码没有被覆盖,很难知道你的应用程序类路径上的jar是否被使用。

为此你可能需要找到可以覆盖整个代码的好的junit测试用例,然后你可以使用Class Dependency Analyzer工具。

有点尝试看东西。您可以尝试逐个删除JAR并检查应用程序是否有效,但是junit情况是进行此检查的最佳选择。