【问题标题】:Reduce jar file size减小 jar 文件大小
【发布时间】:2012-05-10 03:05:05
【问题描述】:

有什么办法可以减小 jar 文件的大小?

我想要一个工具来减少未使用的依赖项。

我使用 maven 进行依赖管理。

【问题讨论】:

  • “未使用的依赖项”是什么意思?在你自己的 pom 或其他人的 pom 中?
  • 在我自己的 pom 中,我包含了大约 350kb 的 apache 的 httpclient。在它的 pom 文件中,它与其他文件有依赖关系。我想要一个工具来减少 jar 中未使用的类并减少 jar 文件。
  • 如果 httpclient 包含未使用的依赖项,您可以在 pom 中使用 excludes 来排除传递依赖项。

标签: java maven jar size


【解决方案1】:

JAR 文件通常不包含 Maven 意义上的依赖项。所以你一定是在谈论:

  • WAR 或 EAR 或类似文件,
  • 由大量JAR文件组合而成的所谓UberJAR文件;例如使用 Maven 阴影插件,或
  • 比 Maven 模块更精细的依赖关系。

在前两种情况下,您可以通过在依赖规范中或在 war 或 shade 插件构建描述符中排除名义上的依赖 JAR 来排除它们。 IIRC,阴影插件还允许您排除特定的包和类。

最后一个可能需要单独的工具来对 JAR 文件进行后处理。摆脱未使用的类是混淆器可以做的事情。但是,您需要注意不要消除反射使用的类或类名;例如通过 DI/IoC 框架或 AOP 框架。

(一般来说,这种工具通过分析.class文件外部引用所隐含的依赖关系来试图弄清楚使用了哪些类。DI/IoC/AOP等引入了其他类型的依赖关系,在.class 文件结构。)

【讨论】:

    【解决方案2】:

    如果您想了解您的项目使用的依赖项,只需查看maven-dependency-plugin,它可用于分析已使用/未使用的依赖项。

    通过以下方式检查您的依赖项:

    mvn dependency:analyze
    

    或者像这样查看 dep 树:

    mvn dependency:tree
    

    或者您可以查看您的 ide(取决于您使用哪个),例如使用 Eclipse (Indigo) 和 m2e 插件,您有一个选项卡“Dependency Hierarchy”,它显示依赖关系树,包括。传递依赖。

    在某些情况下,您必须小心 DI 框架使用的依赖项,这些依赖项无法通过 maven-dependency-plugin 或 ide 插件进行分析。

    【讨论】:

      【解决方案3】:

      pack200 可以大大减少 JAR 的大小。但它很难与 Maven 一起使用,并且无法与 EE 容器一起使用。

      为什么会有未使用的依赖项?

      【讨论】:

      • 我有一个 jar 文件,它与另一个 jar 有依赖关系。我只在该 jar 上使用 1-2 个类,并希望减少未使用的类。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2010-10-08
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多