请记住,正如停机问题所证明的那样,您不能肯定地说某个特定类已使用或未使用。至少在任何中等复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载:
- 基于XML配置(例如Spring);
- 从属性文件加载(例如JDBC驱动程序名称);
- 动态添加注释;
- 由于外部输入(例如,用户输入,来自数据库的数据或远程过程调用)而加载;
- 等等
因此,仅查看源代码是不够的。话虽如此,任何合理的IDE都会为您提供依赖性分析工具。IntelliJ当然可以。
您真正需要的是运行时检测应用程序正在执行的操作,但是即使如此也无法保证。毕竟,由于输入的怪异组合,特定的代码路径可能需要运行一千万次,因此无法保证一定会被覆盖。
像这样的工具确实有一些价值。您可能想看看Emma之类的东西。像Yourkit这样的事件探查器可以为您提供代码转储,您也可以对其进行分析(尽管这样做不会很好地拾取瞬态对象)。
就个人而言,我发现IDE不会告诉您任何价值:删除未使用的JAR。比这更细粒度只是索要麻烦,几乎没有收获。



