如何确定Java程序使用哪些类?

Cam*_*pka 5 java optimization dependencies jar

是否有任何工具可以列出哪些应用程序有效地使用哪些类,或者甚至更好地自动修剪JAR库以仅提供引用和使用的类?

cle*_*tus 9

请记住,正如暂停问题所证明的那样,您无法确定某个特定类是否使用过.至少在任何中等复杂的应用程序上.这是因为类不仅仅是在编译时绑定,而是可以加载:

  • 基于XML配置(例如Spring);
  • 从属性文件加载(例如JDBC驱动程序名称);
  • 使用注释动态添加;
  • 由于外部输入而加载(例如用户输入,来自数据库或远程过程调用的数据);
  • 等等

所以只看源代码是不够的.话虽这么说,任何合理的IDE都会为您提供依赖性分析工具.IntelliJ当然可以.

您真正需要的是运行时检测应用程序正在执行的操作,但即使这样也无法保证.毕竟,由于奇怪的输入组合,特定的代码路径可能会在1000万次运行中出现,因此无法保证您已被覆盖.

像这样的工具确实有一些价值.你可能想看看像艾玛这样的东西.像Yourkit这样的分析器可以为您提供代码转储,您也可以对其进行分析(尽管这不会很好地获取瞬态对象).

我个人认为除了IDE告诉你的东西之外没有什么价值:删除未使用的JAR.比这更精细,只是要求很少甚至没有收获的麻烦.