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 的情况下工作 |
仅添加非模块化库 |
模块化和非模块化都可以添加 |
封装和抽象较弱 |
封装性和抽象性很强 |
模块化程度较弱 |
模块化很强 |
无法通过将库的一部分添加到类路径中来将其添加到项目 |
我们只能通过将库的所需部分添加到模块路径中来将其添加到项目中 |
JAVA 中的模块
JDK 由模块组成。如果您在系统上使用 JDK,那么您也拥有源代码。如果您不知道这一点,请查看此内容以了解更多信息。
JDK安装目录中有一个/lib目录。在该目录中,您将找到一个 src.zip 文件。然后将其解压缩到 /src 目录中。之后查看 /src 目录并找到 /java.base 目录,然后您将找到 module-info.java 文件,最后打开它。
在顶部的 Javadoc 注释之后,您将找到一个名为 modulesection.base 的文件夹,后面是导出行。该格式有点深奥,所以我们不会太深入。
正如您所看到的,java.base 模块导出了几个众所周知的 Java 包,包括 java.io。这就是收集包的模块的工作原理。
指令的要求与导出相反。因此,所指定的模块可能需要一个模块。指定模块路径的方式与在针对模块运行 Java 编译器时提供类路径的方式相同。这使得解决依赖关系成为可能。
向后兼容性
Java 9 在创建时就考虑到了向后兼容性。不过,新的模块结构是一个重大转变,您可能会遇到问题,特别是在大型代码库中。
以下命令可能对解决源自代码库的问题有用 - 当命令 jdeps 指向一个类时,它将查找任何依赖项以及需要依赖项的模块。
如果您的依赖项导致问题,您可以希望您所依赖的包具有兼容 Java 9 的更新版本来构建。如果没有,您可能需要寻找选项。
常见错误
如何解决java.lang.NoClassDefFoundError -
Javax/xml/bind/JAXBException
登录后复制
这是抱怨找不到分配的类的代码,因为它已迁移到模块而对使用代码不可见。有几种解决方案。
JPMS 是一个相当重大的转变,因此采用需要一些时间。幸运的是,由于 Java 8 是长期支持版本,因此没有迫切需要。
然而,从长远来看,旧项目有必要迁移,而新项目必须明智地使用模块,以便也许获得一些已经给予的好处。
结论
JPMS代表Java Platform Module System,在开发初期也被称为project jigsaw。它使开发人员可以更轻松地组织大型应用程序和库。它改进了结构并提高了平台的安全级别。它还用于提高应用程序性能,并且对于较小设备的平台分解很有用。这背后的主要思想是启用模块可见的相关包的集合,同时对模块上的外部使用者隐藏元素。
以上就是JPMS:Java 平台模块系统的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!