如何获取主类的 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 类依赖项列表?的主要内容,如果未能解决你的问题,请参考以下文章