JPMS:Java 平台模块系统
JPMS 代表 Java 平台模块系统。它是 Java 9 中的新功能。我们的 Java 应用程序和 Java 包可以借助 Java 模块系统打包到 Java 模块中。Java 模块允许我们指定模块的哪些包和其他 Java 模块应该能够看到。Java 模块还列出了它运行所需的 Java 模块。
Java 平台系统也称为 Java Jigsaw 或 Project Jigsaw。Jigsaw 的名称在开发时使用。开发它的主要目的是使 JRE 更加模块化。 JPMS 解决了几个主要问题,即 Classpath/JAR Hell、大规模单片 JDK、版本冲突、安全问题。
现在,让我们更深入地了解 Java 平台模块化系统,以了解有关它们的更多信息。
为什么 Java 需要模块?
重要的是要记住,JPMS 是 SE(标准版)功能,并且会影响 Java 的各个级别。尽管如此,该补丁旨在使大多数程序在从 Java 8 切换到 Java 9 时无需修改即可运行。其主要目的是使模块可见的相关包能够聚集在一起,同时向模块的外部消费者隐藏一些组件。
JPMS 的推出具有以下既定目标 -
易于组织大型应用程序和库。
提高安全性
提高应用程序性能
管理小型设备的平台故障。
改进结构。
类路径 VS 模块路径
到目前为止,类路径一直是 Java 中执行程序时可访问内容的主要决定因素。尽管类路径发挥了这一作用并且众所周知,但它最终会变成一个巨大的、未分化的存储桶,所有依赖项都插入其中。
模块路径在类路径上方添加了一个级别。它充当包的存储空间,并选择应用程序可以访问哪些包。
类路径 |
模块路径 |
|---|---|
适用于所有 Java 版本 |
仅适用于 Java 9 及以上版本 |
不需要 module-info.java |
需要 module-info.java |
仅当项目没有时,添加库才有效module-info.java |
库可以在没有 module-info.java 的情况下工作 |
仅添加非模块化库 |
模块化和非模块化都可以添加 |
封装和抽象较弱 |
封装和抽象较强 |
模块化较弱 |
模块化很强 |
无法通过在 classpath 中添加库的一部分将其添加到项目中 |
我们只能通过在 modulepath 中添加库的所需部分将其添加到项目中 |
JAVA 中的模块
JDK 由模块组成。如果您在系统上使用 JDK,那么您也有源代码。如果您不知道这一点,请查看此处以了解更多信息。
JDK 安装目录中有一个 /lib 目录。在该目录中,您将找到一个 src.zip 文件。然后将其解压缩到 /src 目录中。之后查看 /src 目录并找到 /java.base 目录,然后您将找到 module-info.java 文件并最后将其打开。
在顶部的 Javadoc 注释之后,您将找到一个名为 module section.base 的文件夹,后面是 exports 行。格式有点深奥,所以我们不会深入讨论。
如您所见,java.base 模块导出了几个众所周知的 Java 包,包括 java.io。这就是收集包的模块的工作原理。

指令的要求与导出相反。因此,模块可能是正在指定的模块所必需的。您可以像在针对模块运行 Java 编译器时提供类路径一样指定模块路径。这使得解决依赖关系成为可能。
向后兼容性
Java 9 在创建时就考虑到了向后兼容性。然而,新的模块结构是一个重大的转变,您可能会遇到问题,尤其是在大型代码库中。
以下命令可能对源自代码库的问题有用 - 当命令 jdeps 指向某个类时,它将查找任何依赖项和需要依赖项的模块。
如果您的依赖项导致问题,您可以希望您所依赖的包具有符合 Java 9 的更新版本。如果没有,您可能需要寻找选项。
常见错误
如何解决 java.lang.NoClassDefFoundError -
Javax/xml/bind/JAXBException
这是代码抱怨未找到分配的类,因为它已迁移到模块,而使用代码无法看到它。对此有几种解决方案。
JPMS 是一个相当重大的转变,因此采用需要一些时间。幸运的是,由于 Java 8 是一个长期支持版本,因此没有迫切的需求。
然而,从长远来看,旧项目需要迁移,新项目必须明智地使用模块,以便获得一些已经给出的好处。
结论
JPMS 代表 Java 平台模块系统,在其开发初期也称为项目拼图。它使开发人员更容易组织大型应用程序和库。它改进了结构并提高了平台的安全级别。它还用于提高应用程序性能,并且对于较小设备的平台分解很有用。这背后的主要思想是启用对模块可见的相关包的集合,同时隐藏模块上外部消费者的元素。
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

