【问题标题】:How to shrink external java libs?如何缩小外部java库?
【发布时间】:2012-06-26 21:29:23
【问题描述】:

我正在编写一个小程序,它使用大约 10 个外部库。它们一起占用超过 2 兆字节。在某些库中,我们只使用 1-2 个类,因此可以安全地删除许多其他类。所以问题是如何从 jar 库中删除未使用的类?

许多其他问题都链接到 Proguard。但它不处理库(或者我做错了什么)并且还破坏了使用反射的部分代码。

【问题讨论】:

  • 如果你想从外部库中删除文件,如果外部库中的类是依赖的,我认为这是一个乏味的过程。可能您可以从删除不必要的开始,如果有任何投诉,例如 ClassNotFoundException。 AFAIK,proguard 隐藏了你的类文件,这并不意味着它删除了不必要的类。

标签: java jar proguard shrink


【解决方案1】:

您可以使用 maven-shade-plugin 并告诉它构建一个最小化的 jar 文件来组合您的代码和库。

【讨论】:

    【解决方案2】:

    可以使用ClassDep之类的东西,它静态地标识你将使用哪些类。

    然而,这很容易被愚弄。想象一下你的一些代码包含:

    Class.forName(className);
    

    因此您可以动态构建类名并加载该类。 ClassDep 之类的工具无法识别这些情况,因此您需要对缩小的 jar 进行全面测试。

    【讨论】:

      【解决方案3】:

      ProGuard 可以与库一起处理您的代码(使用选项 -injars)。您仍然可以保留不想处理的外部库(使用选项 -libraryjars)。

      任何自动收缩工具都会有反射问题。 ProGuard 识别一些基本的反射,它允许你指定内部 API 的部分,为了反射而应该保留。 ProGuard 支持一些强大的配置,但根据库中反射的数量,它可能仍需要反复试验。

      【讨论】:

        【解决方案4】:

        您可以简单地“解压缩” JAR,只从每个 JAR 中提取您想要的类,然后将它们放在自定义存档中。 Brian A. 就如何识别这些类和一些注意事项给出了很好的建议。我想补充一下,您也可能违反了许可证...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-10
          • 1970-01-01
          • 2023-03-28
          • 2011-01-01
          • 2017-05-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多