java - 为什么项目 Jigsaw/JPMS?

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

Java 的包管理系统对我来说总是简单而有效。它被 JDK 本身大量使用。我们一直在用它来模仿命名空间和模块的概念。

Project Jigsaw(又名 Java Platform Module System)试图填写什么?

来自官方网站:

The goal of this Project is to design and implement a standard module system for the Java SE Platform, and to apply that system to the Platform itself and to the JDK.

最佳答案

Jigsaw 和 OSGi 正在尝试解决相同的问题:如何允许粗粒度的模块进行交互,同时屏蔽它们的内部结构。

在 Jigsaw 的例子中,粗粒度的模块包括 Java 类、包及其依赖项。

这是一个示例:Spring 和 Hibernate。两者都依赖于第 3 方 JAR CGLIB,但它们使用不同的、不兼容的 JAR 版本。如果你依赖标准的JDK,你能做什么?包括 Spring 想要打破 Hibernate 的版本,反之亦然。

但是,如果您有像 Jigsaw 这样的高级模型,您可以轻松地在不同模块中管理 JAR 的不同版本。将它们视为更高级别的包。

如果您构建 Spring from the GitHub source你也会看到的。他们重做了框架,因此它由几个模块组成:核心、持久性等。您可以挑选应用程序所需的最小模块依赖集,而忽略其余的。它曾经是一个 Spring JAR,其中包含所有 .class 文件。

更新:五年后 -​​ Jigsaw 可能还有一些 issues解决。

关于java - 为什么项目 Jigsaw/JPMS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11844829/

相关文章:

java - Java 中的可选 orElse 可选

java - Java 10 : annotations not found in maven 上的 maven lombok 插件

maven - Jigsaw 项目与 Maven

java - 根据条件创建特定类型的数组

java - 有什么方法可以在不反射的情况下访问方面的目标对象字段(给定吸气切入点)?

FileUploadBean.uploadFile 中的 java.lang.NullPointerException

java - 是否可以从静态方法开始使用 Lombok @Builder?

最终变量在 jshell 中无法正常运行

java - 在具有模块间测试依赖性的 Maven 构建中正确实现 Java 模块

java - --patch-module 是否会反射性地显示出来?