【问题标题】:Does the Java Platform Module System reduce a JAR size?Java 平台模块系统是否会减小 JAR 的大小?
【发布时间】:2019-11-14 09:05:03
【问题描述】:

Here 描述了 Jigsaw 的以下好处:

作为 Project Jigsaw 的一部分,所有 Java 平台 API 都被拆分为单独的模块。将所有 Java API 拆分为模块的好处是,您现在可以指定应用程序需要的 Java 平台模块。了解您的应用程序需要哪些 Java 平台模块后,Java 可以打包您的应用程序,仅包括您的应用程序实际使用的 Java 平台模块。

但是,我不明白它是如何工作的,因为据我所知,Java 不会将所需的模块直接放入 JAR 中。它只是在模块路径中查找它们。那么,Java 是通过什么方式减少 JAR 大小的呢?

【问题讨论】:

  • 我认为它不会减少 jars 的大小,而是允许您拥有更小的 JVM,只嵌入应用程序所需的模块。罐子已经有了明确定义的格式。
  • 你应该阅读一下jlink
  • 它在哪里说它“减少 JAR 大小”??
  • @CarlosHeuberger 它没有。但我是这么想的,因为据说只打包需要的模块

标签: java jar java-9 java-platform-module-system


【解决方案1】:

Java 可以打包您的应用程序,仅包括 Java 平台 您的应用程序实际使用的模块。

从 Java 9 开始,可以使用jlink 工具创建自定义运行时映像

基本上,自定义运行时映像是一个包,它不仅包含您的第 3 方库,还包含 JVM 所需的部分。这是某种自包含的可执行映像,其中包含运行它所需的一切,而无需在您的操作系统上安装 JRE。这是一个很好的功能,因为如果有人安装了特定的 JRE 版本来运行映像,您不必担心。

现在,我想您所指的句子并不想说与 Java-9 之前的(非模块化)JAR 相比,JAR 的大小减小了。我认为作者想说的是,与包含整个 JVM 的 JAR 相比,仅打包 JVM 所需模块的能力减小了它的大小。

例如,假设您正在编写一个仅使用一些基本 Java API 的应用程序,例如集合、IO 或日期和时间 API(包含在 java.base 模块中)。由于您没有使用诸如 Swing(java.desktop 模块)或 JDBC(java.sql 模块)之类的 API,因此您不需要将它们包含在您的包中。因此,您可以明确指定您的应用程序正在使用哪些 java 模块(在 module-info.java 文件中),并且只有那些将与您的应用程序捆绑在一起。在这种情况下,您只需在所需模块列表中添加 java.base 模块。另一方面,如果需要使用 JDBC 为您的应用程序添加数据库访问权限,您可以将 java.sql 模块添加到模块列表中。如您所见,无需将整个 JVM 与您的应用程序捆绑在一起,因为您可以选择需要 JVM 的哪些模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2019-06-09
    • 2023-03-29
    相关资源
    最近更新 更多