2009-01-24 28 views

回答

9

请记住,正如halting problem所证明的那样,您无法明确指出某个特定类是否被使用。至少在任何适度复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载:

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

所以只是看着源代码是不够的。话虽如此,任何合理的IDE将为您提供依赖分析工具。 IntelliJ当然会。

你真正需要的是运行时检测你的应用程序正在做什么,但即使这样也不能保证。毕竟,由于奇怪的输入组合,一个特定的代码路径可能会出现在千万次运行中,因此无法保证您的覆盖范围。

虽然这样的工具确实有一些价值。你可能想看看像Emma。 Profiler如Yourkit可以给你一个代码转储,你也可以进行分析(尽管这样做不会很好地获得瞬态对象)。

就我个人而言,除了IDE会告诉你什么之外,我发现的价值不大:删除未使用的JAR。比这更细化的只是要求一点点到没有收获的麻烦。

+0

如果我们不动态加载类会怎么样?换句话说,没有XML配置,属性文件,注释,rpc和什么。那么这样的工具可以保证*工作吗? – Pacerier 2014-06-13 11:02:35

3

你可以尝试JarJar http://code.google.com/p/jarjar/

它修剪JAR依赖。

+0

专门创建一个胖的jar和一个jar只是你的代码。使用'java -jar jarjar.jar找到class code.jar fat.jar',它将列出你的依赖关系。您可以创建一个基于此的“保留”语句的规则文件,然后将您的胖罐加工为最小化的罐子。 – 2015-12-09 17:13:13

4

是的,你想要ProGuard。它是一个完全免费的Java代码收缩器和混淆器。配置简单,快速而有效。

+1

只要确保提供了正确的“根”类列表,从中可以搜索到引用,并且您不会忘记您通过反射使用的任何类。 – 2009-01-24 10:06:05

0

对于大多数情况下,只需使用javac即可轻松完成。

删除你现有的类文件。使用入门级的名称调用javac。它会编译这些必要的类,但不会再有。任务完成。

+0

我认为OP意味着图书馆以及你自己的课程 – Chii 2009-01-24 12:34:10

相关问题