san*_*ity 11
您需要Class Dependency Analyzer工具.引用介绍:
此工具的目的是分析Java™类文件,以便更多地了解这些类之间的依赖关系.
确实,它不会捕获运行时依赖性 - 但是如果没有运行详尽的100%覆盖率测试套件,您将无法确定是否已捕获所有运行时依赖性.
如果您期望运行时依赖性,则应将CDA用作第一遍,然后对结果应用程序进行详尽的测试,以确保没有仅通过运行时依赖性引用的jar文件.
我想"逐个删除它们并检查应用程序是否仍然编译并正常工作"不是预期的答案:)
(编辑:虽然上面提出的方法可能有点自动化,但它仍然有点痛苦,必须有一个替代方案,至少对于编译时依赖性.经过一些谷歌搜索,我发现Jar Analyzer似乎是一个很好的工具按照此博客文章中的说明工作:
Jar Analyzer扫描编译依赖项,这意味着它可以创建一个树,其中需要JAR文件来编译编译这些JAR文件所需的JAR文件,等等.您将获得一个非常好的报告/图表,其中显示了所有JAR文件及其存在的原因.
您还可以看到与您的代码没有任何关联的JAR文件,删除它们及其子代.我在libs文件夹中发现的是,libs文件夹中的150个JAR文件中有大约20%在编译时未使用,这些是可能被删除的JAR.
最大的问题是,您没有得到任何关于哪些JAR文件仅在运行时通过发现和反射使用的提示.这就是真正的工作开始的地方.
查明是否在运行时使用JAR文件的唯一方法是将其取出,启动应用程序并测试每个功能.如果您的应用程序适中,那么执行100%回归测试需要花费数小时.所以在实践中,我最终做了很多猜测,快速和肮脏的测试,并且四处寻找找出实际使用的运行时依赖项.
它似乎很容易使用:下载,解压缩并在包含所有jar的目录上运行该工具.或者使用提供的Ant任务.)