如何获取主类的 Java 类依赖项列表?

Posted

技术标签:

【中文标题】如何获取主类的 Java 类依赖项列表?【英文标题】:How do I get a list of Java class dependencies for a main class? 【发布时间】:2010-09-17 01:27:51 【问题描述】:

有没有办法找到一个java主类的所有类依赖?

我一直在手动筛选主类的导入及其导入,但后来意识到,因为不必导入同一个包中的类,所以我整理了一个不完整的列表。

我需要一些能够递归地找到依赖关系的东西(可能达到定义的深度)。

【问题讨论】:

我试过 JavaSkeleton (xmloperator.net/jsk) 但它只适用于 java 1.3 或 1.4 :( 【参考方案1】:

您可能想看看jdeps 命令行工具:

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html

jdeps -cp <your cp> -v <path to your .class file>

该命令将返回该 java 类文件的依赖项列表。您可以在命令中使用许多其他选项,例如 -regex 来查找与给定模式匹配的依赖项

【讨论】:

【参考方案2】:

我刚刚找到Class Dependency Analyzer,下载、安装configure 和10 分钟后我有一个完整的类依赖列表。

【讨论】:

你能说一下你是如何使用它来解决这个特殊问题的吗?【参考方案3】:

只需 javac 即可轻松完成。删除你的类文件,然后编译主类。 javac 将递归编译它需要的任何类(前提是您不将包私有类/接口隐藏在奇怪命名的文件中)。当然,这不包括任何递归 hack。

【讨论】:

如何生成类依赖列表? @Derek Mahar 好吧,你需要做一个,呃,find . -name "*.class" -print 或者,呃,dir/s(以及其他一些选项)。 绝妙的解决方案!如果您将 javac 的输出重定向到一个新的空目录,则效果特别好。然后您可以立即打开该文件夹并拥有一个不错的依赖库!谢谢!【参考方案4】:

在intellij idea 你有漂亮的dependency structure matrix。您可以完美地探索包和类级别的依赖关系。如果你喜欢它更简单,你也有一个依赖查看器,但是你只能看到一阶依赖。

【讨论】:

【参考方案5】:

这是一个代码 sn-p,您可以将其放入 Java 中的 main 方法中,以输出应用程序所有依赖项的路径:

ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader) cl).getURLs();
for(URL url: urls)
    System.out.println(url.getPath());

【讨论】:

以上是关于如何获取主类的 Java 类依赖项列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Quicklisp 提供的每个系统的所有依赖项列表?

如何从另一个类(java)访问主类的变量?

在 Startup 类中获取依赖于 DI 的类的实例

如何检查 pom.xml 以获取更新的依赖项

如何在适配器类中的列表视图项上获取动画?

java中如何通过反射获取类的属性