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