How to analyse which jar file is used in a Java program?

耗尽温柔 提交于 2019-11-28 11:21:12

Invoke the java executable with the -verbose:class argument. This will produce output like:

[Loaded org.apache.log4j.helpers.ThreadLocalMap from file:/C:/.../1.2.14/log4j-1.2.14.jar]
[Loaded org.apache.commons.cli.Option from file:/C:/.../commons-cli-1.2.jar]

Might not be the easiest method, but you could look at what files the process has open and determine it from that.

If you're on windows you could use Process Explorer to see what files the process has open at any given time, or Process Monitor to watch the filesystem access as it runs. There will be a lot of noise, but you could figure it out from there.

If you're on the Mac I think the built-in Activity Monitor can give you a list of open files. Sadly I don't know the command you'd use in Linux.

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

Try this piece of code :

    //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");

It is not that easy, to know whether piece of code from JAR is being used is only possible when your code calling that jar is being executed (i.e. being covered). Till the point your code isn't covered it is difficult to know whether jar on your application class path is being used or not.

For this you might need to right good junit test cases which can cover you entire code and then you can use Class Dependency Analyzer tools.

It is kind of try and see thing. You can try removing JARs one by one and check whether application do works or not but junit cases are the best options to do this examination.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!