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

w8f9ii69  于 2022-11-07  发布在  其他
关注(0)|答案(5)|浏览(251)

我有一个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 * 中不存在)
忘了说了,我没有访问源代码。

jqjz2hbq

jqjz2hbq1#

"轻松"

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中读取所有依赖项,因为它们可以是动态的,并且可以在库外部定义(请参见:不可能完成的使命)。
很难判断是否有工具,请查看java-source.net上的这些目录:

bwleehnv

bwleehnv2#

你可能想看看BCEL,它将允许你解析类文件,并找出它们使用的是什么。

lf5gs5x2

lf5gs5x23#

检查untangle
它是一个小的cli实用程序,用于在包含类的jar或目录中搜索类或包的用法。
免责声明:我是untangle的作者

mmvthczy

mmvthczy4#

检查JDepend
图形用户界面显示每个分析的Java包的传入和传出耦合,以熟悉的JavaSwing树结构呈现。

hpcdzsge

hpcdzsge5#

JavaDepend可以帮助你满足这样的需求,你可以为任何代码元素获取所使用的所有元素,它可以是jar、命名空间、类或方法。
CQL是一种类似于查询代码库的SQL,它为您提供了更多的灵活性来请求有关代码的任何信息。

相关问题