如何检查 Jar 文件之间的依赖关系?

Posted

技术标签:

【中文标题】如何检查 Jar 文件之间的依赖关系?【英文标题】:How To Check Dependencies Between Jar Files? 【发布时间】:2010-10-21 15:56:59 【问题描述】:

我最近接受了一个用 JSF 编写的 Web 系统的支持和编程。代码有点凌乱和冗余,是的,​​不存在文档。

系统有40多个jar库,大部分都是因为老版本和测试而冗余的。要删除一个jar,我必须检查它没有在代码中导入,所以我在代码中搜索了jar导入路径(我使用的是IntelliJ IDE),确保它没有被使用,然后将其删除。

但是,在编译代码之后,在测试过程中出现了一些运行时错误。我发现我删除了一些其他现有 jar 使用的 jar。

问题,在删除一个 jar 之前,我如何确保它没有被另一个 jar/java 类使用?

尽管 jars 已经编译了类,但编译后的类确实具有所需库的导入路径。但我不能用 IntelliJ 搜索它们(不在 jars 文件中搜索)。

我现在做的唯一方法是在每次删除 jar 时测试系统,看看我是否可以让它崩溃!由于要测试的功能数量庞大,这完全不是一个简单的方法。

我希望有一个工具可以提交多个 java 文件/jar,并显示它们之间的依赖关系。

【问题讨论】:

【参考方案1】:

我知道 JBoss 项目中有一个名为 JBoss TattleTale 的工具,可能值得一看:

http://www.jboss.org/tattletale

【讨论】:

+1 这个工具仍然很新,但提供了一些很好的信息。它甚至可以显示 jar 文件中的类之间的依赖关系。可惜它不适用于 maven。 正是我需要的!我对其进行了测试,它为我提供了有关 jar 依赖项等的酷报告。谢谢! 很高兴我能帮上忙。我认为它使用 GraphViz 来可视化图表,有一些方法可以对其进行微调以使其看起来更好。【参考方案2】:

JDepend 将为您分析任意数量的 JAR、类文件等的依赖关系。将它报告的包与这些 JAR 相关联应该是一个微不足道的额外步骤。

【讨论】:

我也测试了 JDepend,但是在查看依赖关系时它比 jboss tattletale 复杂得多。但是有一个优势,它也显示了类之间的依赖关系,而不仅仅是 jars。谢谢【参考方案3】:

为什么不将 Maven 用于您的项目?这将帮助您管理依赖项。

【讨论】:

Maven 站点插件将生成包含依赖项的报告。 NetBeans 6.7 中的 Maven 插件包括一个用于 Jars 的图形依赖项查看器:wiki.netbeans.org/NewAndNoteworthyMilestone3NB67【参考方案4】:

我也找到了JarAnalyzer,不过好像没有维护了。

【讨论】:

【参考方案5】:

嗯,现在是 2013 年,所以我不确定这个工具在 2009 年是否很棒。 刚用过,发现很有用: 类依赖分析器 (CDA) (V1.14) http://www.dependency-analyzer.org/ 这个工具有一个图形用户界面(Swing?)。 添加 lib jars 和 Java 类后,它将显示 Class/Package/Container(jar) 级别的依赖关系。 它也可以显示家属。 所以很容易找到依赖的jar和依赖的jar。

【讨论】:

【参考方案6】:

还有来自 Jini SDK 的 ClassDep。

http://java.sun.com/products/jini/2.0/doc/api/com/sun/jini/tool/ClassDep.html

【讨论】:

以上是关于如何检查 Jar 文件之间的依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查多个Java项目的所有缺少的依赖项/相关JAR文件的列表?

Gradle + Buildship - 在 JAR 和项目之间切换依赖关系

如何使用具有依赖关系的gradle构建jar文件

Spring framework体系结构及内部各模块jar之间的maven依赖关系

如何找到对象文件之间的依赖关系?

如何从具有 gradle 依赖关系的代码创建一个 Android 库?