如何知道给定jar文件使用哪个类/包/方法?

anu*_*sth 5 java jvm jar java-me

我有一个jar文件.我想知道JAR文件中的类使用了哪些外部类和方法.谁能建议我任何工具?

例如 - 如果以下两个类被打包到Myjar.jar中

import java.util.Vector;
class MyJarClass{

    public static void main(String args[]){
        Vector v = new Vector();
        AnotherClass another = new AnotherClass();

        v.addElement("one");
        another.doSomething();

    }
}

class AnotherClass{

    void doSomething(){
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将JAR提供给工具时 - 该工具应显示java.util.VectorVector.adElements()来自外部源(MyJar.jar中不存在)

忘了提,我没有访问源代码.

And*_*s_D 5

简单的

import com.example.*;
Run Code Online (Sandbox Code Playgroud)

可能的

List<com.example.MyType> = new ArrayList<com.example.MyType>();
Run Code Online (Sandbox Code Playgroud)

一个挑战

Class<?> clazz = Class.forName("com.example.MyType");
Run Code Online (Sandbox Code Playgroud)

不可能完成的任务

List<String> classes = getClassNamesFromUrl("http://example.com/classes.txt");
for (String className:classes) {
   doSomethingWith(Class.forName(className));
}
Run Code Online (Sandbox Code Playgroud)

我支持乔恩的建议,即查看字节码(BCEL),但请注意,通常不可能从 jar 中读取所有依赖项,因为它们可以是动态的并在库外部定义(请参阅:不可能的任务)。


很难判断是否有工具,看看java-source.net上的那些目录:

进一步阅读