当前位置: 首页 > 面试题库 >

在Java类中查找所有依赖项

曹智
2023-03-14
问题内容

我正在尝试获取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]。它包含我使用过的每个类和接口,以及用于泛型参数化的每种类型。



 类似资料:
  • 问题内容: 我有一个python脚本(2.7),顶部有一些“有趣的”导入。我最初想使用py2exe将其编译成一个我可以更容易分发的exe。 我已经放弃,正在尝试使用cx- freeze。但是,我在那里也有问题。问题似乎是我添加到Python中的库(jinja2和restkit)。我在python目录./Lib/site-packages/Jinja2-2.6-py2.7.egg/jinja2和这里

  • 我在WebSphere 8.5上部署了一个Java应用程序作为EAR。我试图弄清楚如何从ejb-jar.xml.(Noob到EJB)进行JNDI查找。我通常通过在WAR中添加条目来从WAR中进行JNDI条目查找web.xml.现在在ejb模块上工作,我发现我仍然可以在ejb bean[1]上进行JNDI查找。请看下面我的ejb-jar.xml: < br >我的问题是:现在我没有web.xml,如

  • 我知道如何查看Android Studio项目中的所有依赖项,但它没有显示哪些库需要哪些。他们只是全部分组在一起。是否有一种方法可以查看我在build.gradle文件中声明的每个特定依赖项需要哪些库?

  • 问题内容: Eclipse捆绑包(例如,在激活器代码中)如何在运行时找到依赖的Bundle实例?我想找到Eclipse选择满足依赖要求的捆绑软件,我不想自己解释清单。 一个例子:我想在我当前捆绑包所依赖的所有捆绑包中找到所有名为“ marker.txt”的资源。还有传递依赖。为了做到这一点,我需要能够找到所有这些捆绑包。 问题答案: 没有简单的方法来确定依赖关系。最好的方法是通过PackageAd

  • 问题内容: 对于一个我正在从事的项目。我需要在文件系统上寻找可执行文件。对于UNIX派生类,我假定用户将文件包含在强大的$ PATH变量中,但是Windows上没有这样的东西。 我可以放心地假设该文件在文件系统中的深度最多为2个级别,但是我不知道它将是什么驱动器。我必须尝试所有驱动器,但无法弄清楚如何列出所有可用的驱动器(已为其分配了字母)。 有什么帮助吗? 编辑: 我知道有%PATH%变量,但是

  • 本文向大家介绍在SAP HANA中查看以查找对象依赖性,包括了在SAP HANA中查看以查找对象依赖性的使用技巧和注意事项,需要的朋友参考一下 在SAP HANA系统中,您可以在SAP系统模式中使用一个名为“ OBJECT_DEPENDENCIES”的视图