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

最佳答案

请记住,正如halting problem所证明的那样,您绝对不能说已使用或未使用特定的类。至少在任何中等复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载:

基于XML配置的

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

  • 因此,仅查看源代码是不够的。话虽如此,任何合理的IDE都会为您提供依赖性分析工具。 IntelliJ当然可以。

    您真正需要的是运行时检测应用程序正在执行的操作,但是即使如此也无法保证。毕竟,由于输入的怪异组合,特定的代码路径可能需要运行一千万次,因此无法保证一定会被覆盖。

    像这样的工具确实有一些价值。您可能想看看类似Emma的东西。像Yourkit这样的事件探查器可以为您提供代码转储,您也可以对其进行分析(尽管这样做不会很好地拾取瞬态对象)。

    就个人而言,我发现IDE不会告诉您任何价值:删除未使用的JAR。比这更细粒度只是索要麻烦,几乎没有收获。

    07-24 09:46
    查看更多