如何检查 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 和项目之间切换依赖关系