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

时间:2010-07-20 06:47:04

标签: java java-me jar jvm

我有一个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(){
    }
}

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

忘记提及,我无法访问源代码。

4 个答案:

答案 0 :(得分:4)

轻松

import com.example.*;

<强>可能的

List<com.example.MyType> = new ArrayList<com.example.MyType>();

挑战

Class<?> clazz = Class.forName("com.example.MyType");

不可能的任务

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

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


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

进一步阅读

答案 1 :(得分:3)

您可能需要查看BCEL,这将允许您解析类文件并找出它们使用的内容。我预计这将是一定的努力。

答案 2 :(得分:0)

检查JDepend

图形用户界面显示每个分析的Java包的传入和传出耦合,在熟悉的Java Swing树结构中显示。

答案 3 :(得分:0)

JavaDepend可以帮助您满足这些需求,您可以为任何代码元素获取所有使用的元素,它可以是jar,命名空间,类或方法。

CQL类似于查询代码库的SQL,可让您更灵活地请求有关代码的任何信息。