我正在开发一个使用 34 个外部 jar 的现有 Java 应用程序。
我的部分工作是使代码更简洁,不那么臃肿。通过从路径中删除它并测试代码,我可以轻松找到根本没有使用的库。
但是,我怀疑有些库只使用了一小部分(可能是一个或两个函数)。
例如,有一个用于一些 UI 构建的库。但是,我怀疑在应用程序代码中,它仅用于其一/两个日志记录功能。我实际上可以实现我自己的那个函数版本,并完全让应用程序摆脱那个库。
由于我无法手动浏览代码,是否有任何现有工具可用于查看应用程序代码中使用了多少库代码?
我正在开发一个使用 34 个外部 jar 的现有 Java 应用程序。
我的部分工作是使代码更简洁,不那么臃肿。通过从路径中删除它并测试代码,我可以轻松找到根本没有使用的库。
但是,我怀疑有些库只使用了一小部分(可能是一个或两个函数)。
例如,有一个用于一些 UI 构建的库。但是,我怀疑在应用程序代码中,它仅用于其一/两个日志记录功能。我实际上可以实现我自己的那个函数版本,并完全让应用程序摆脱那个库。
由于我无法手动浏览代码,是否有任何现有工具可用于查看应用程序代码中使用了多少库代码?
JDepend可以告诉您应用程序类的直接依赖关系,但这并不能真正告诉您可以消除哪些 JAR,原因(至少)有两个:
Class.forName
.从 JDepend 开始可能是最简单的,并且只使用它告诉您您需要的 JAR 进行构建。然后,在运行时,您将获得 class-not-found 异常,这些异常会告诉您需要哪些额外的 JAR。
编辑:
由于我无法手动浏览代码,是否有任何现有工具可用于查看应用程序代码中使用了多少库代码?
作为重读你的问题,我意识到你要求的东西比简单的依赖分析更有针对性。我认为代码覆盖率工具可能会为您指明正确的方向。一些开源的可能性:
您可以检测整个应用程序,然后正常运行它并找出实际调用了哪些类。但是,您需要充分锻炼它。Java 根据需要加载类,因此您的应用程序可能仅依赖于类的某些特性。
我倾向于使用proguard之类的东西来识别旧的未使用代码,尽管它具有大量其他功能,但它们与您的问题无关。
您可以搜索 JAR 开头的包的代码和 xml。
我会尝试从构建中删除它并重新构建程序,并在编译时对其进行测试。
对于快速而肮脏的策略,您可以选择编写一个脚本来递归所有应用程序代码并提取所有导入,按最少到最常用对其进行排序,将基本导入包结构与 jar 匹配,然后检查使用最少导入 jar 的位置.
为了更好地进行长期分析,请先尝试解决这些问题。首先,如果可以,最好使用标准构建工具转换应用程序,例如 maven。接下来让应用程序在标准 IDE 上运行和构建,例如 eclipse。
现在您可以搜索和使用可以让您做您需要做的事情的插件。
例如行家
mvn 依赖:分析
看看可以做同样事情的 eclipse 插件
例如
http://classpathhelper.sourceforge.net/
未来有可维护性
这可能是额外的前期工作,但您可以更好地分析代码,您的任务就会更快。如果您想成为大师,您甚至可以编写一个 eclipse 插件并分享它!