2

一个项目正在使用各种库。例如a.jar, b.jar, c.jar,d.jar等等
一些 jars 已经被重构,现在是ab.jar等等cd.jar
我需要的是一种自动方法来查找我的安装中的哪些 jars 现在已经过时并且我可以删除它们。
这可能吗?

4

2 回答 2

2

因此,使用LooseJar,您可以通过添加以下内容来检测未使用的 Jar 文件:

-javaagent:loosejar.jar

当您从命令行调用时(或作为 Eclipse 中的 VM 选项)添加到您的 java 命令。我想这在技术上不是自动的,因为需要调用在运行时动态加载类的代码行,以便 LooseJar 知道需要该类以及需要 jar。一个好的方法可能是使用这个 java 代理调用你的单元测试(假设你的单元测试有很好的代码覆盖率)

于 2012-08-28T09:19:56.537 回答
2

最好的方法是使用maven。如果在 maven 中定义了依赖项,您可以运行mvn dependency:tree以检索所需的信息。详情请参阅这篇文章

如果您不使用 maven,则可能必须使用jdepend 之类的工具。但请注意:此类工具无法真正检索所有依赖项。仅使用静态分析无法检索对通过反射调用的动态加载的类或 API 的依赖关系。只有在您运行应用程序时才能实现完整的解决方案,使用所有可能的场景对其进行测试并检查类加载器加载了哪些类。如果您有 100% 的测试覆盖率,您可以使用选项运行您的应用程序-verbose:class,然后针对您的应用程序运行所有单元测试。您将获得所有已加载类的列表。现在将此列表放入文件并编写分析类列表并将其转换为 jars 列表的 shell 脚本。

于 2012-08-28T09:26:44.223 回答