代码之家  ›  专栏  ›  技术社区  ›  Camilo Díaz Repka

如何确定Java程序使用哪些类?

  •  5
  • Camilo Díaz Repka  · 技术社区  · 17 年前

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

    4 回复  |  直到 17 年前
        1
  •  9
  •   cletus    17 年前

    记住,正如 halting problem 你不能肯定地说某个特定的类正在使用或没有使用。至少在任何中等复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载:

    • 基于XML配置(如Spring);
    • 从属性文件(如JDBC驱动程序名称)加载;
    • 动态添加注释;
    • 由于外部输入(如用户输入、数据库数据或远程过程调用)而加载;
    • 等。

    所以仅仅查看源代码是不够的。也就是说,任何合理的IDE都将为您提供依赖性分析工具。Intellij当然有。

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

    不过,像这样的工具确实有一些价值。你可能想看看 Emma . 仿形器 Yourkit 可以给您一个代码转储,您也可以对其进行分析(尽管这不会很好地收集瞬态对象)。

    就我个人而言,我发现除了IDE告诉你的:移除未使用的罐子之外,没有什么价值。比这更为细微的是无益而求麻烦。

        2
  •  4
  •   L. Cornelius Dol    17 年前

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

        3
  •  3
  •   Ruggs    17 年前

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

    它修剪JAR依赖项。

        4
  •  0
  •   Tom Hawtin - tackline    17 年前

    对于大多数情况,只使用javac就可以很容易地做到这一点。

    删除现有的类文件。用入口类的名称调用javac。它将编译那些必要的类,但不再编译。工作完成了。