在Java类中查找所有依赖项

我正在尝试获取Java类中的所有依赖关系,包括用于泛型参数化和局部变量类型的类。到目前为止,我发现的最佳框架是apache

bcel。使用它,我可以轻松地从字节码中找到所有字段,方法参数和局部变量。基本上,除了泛型和局部变量类型以外的所有内容。例如,在第1行中,List<Point>

points = new

ArrayList<Point>();我只能使用JavaClass.getConstantPool()bcel中的方法找到一个依赖项-

ArrayList。它无法检测到List接口和Point类。不幸的是,我也尝试了tattletale和CDA,但没有成功(结果相同)。检查导入是不够的-

我还需要来自同一软件包的依赖项,并且我不能接受通配符。我将不胜感激。

回答:

我终于找到了解决方案。ASM Bytecode

Framework是正确的工具。使用官方教程和正确的示例,很容易获得所有需要的依赖关系。在该示例中,已经有一个访问者类DependencyVisitor可以满足我的要求。为了获得正确的格式,我只需要在DependencyVistitor示例代码中更改一种方法,因此它添加了完整的类名,而不是仅添加包:

private String getGroupKey(String name)

{

//Just comment that block so you can get full class names instead of package only

/*

int n = name.lastIndexOf('/');

if (n > -1)

{

name = name.substring(0, n);

}

*/

// Replace resource char with package separator char

packages.add(name.replace("/", "."));

//packages.add(name);

return name;

}

查看DependencyVisitor代码,您可以轻松了解其功能并根据需要对其进行修改。在我的示例类上运行它会给我带来漂亮而有用的输出:

[java.util.ArrayList, java.lang.Object, java.util.List, java.awt.Point,

goobar.test.asmhello.TestClass, java.lang.String, java.lang.Integer,

java.awt.Graphics,

goobar.test.asmhello.TestClass2]。它包含我使用过的每个类和接口,以及用于泛型参数化的每种类型。

以上是 在Java类中查找所有依赖项 的全部内容, 来源链接: utcz.com/qa/420027.html

回到顶部