是否有任何工具可以列出应用程序有效使用哪些类以及何时有效使用,或者更好的是,自动修剪 JAR 库以仅提供既被引用又被使用的类?
4 回答
请记住,正如停止问题所证明的那样,您不能肯定地说某个特定的类已使用或未使用。至少在任何中等复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载:
- 基于 XML 配置(例如 Spring);
- 从属性文件加载(例如 JDBC 驱动程序名称);
- 动态添加注释;
- 作为外部输入的结果加载(例如,用户输入、来自数据库的数据或远程过程调用);
- 等等
所以仅仅看源代码是不够的。话虽如此,任何合理的 IDE 都会为您提供依赖关系分析工具。IntelliJ 当然可以。
您真正需要的是运行时检测您的应用程序正在做什么,但即使这样也不能保证。毕竟,由于输入的奇怪组合,特定的代码路径可能会在 1000 万次运行中出现一次,因此无法保证您已被覆盖。
不过,像这样的工具确实有一些价值。你可能想看看像Emma这样的东西。像Yourkit这样的分析器可以为您提供一个代码转储,您也可以对其进行分析(尽管它不会很好地提取瞬态对象)。
就个人而言,除了 IDE 将告诉您的内容之外,我发现没有什么价值:删除未使用的 JAR。比这更细化只是自找麻烦,收效甚微。
是的,你想要ProGuard。它是一个完全免费的 Java 代码收缩器和混淆器。它易于配置、快速且有效。
你可以试试 JarJar http://code.google.com/p/jarjar/
它修剪 jar 依赖项。
在大多数情况下,您只需使用 javac 即可轻松完成。
删除现有的类文件。使用您的入口类的名称调用 javac。它将编译那些必要的类,但仅此而已。任务完成。