JPMS:Java平台模块系统

JPMS:Java平台模块系统

JPMS是Java平台模块系统的缩写。它是Java 9中的新特性。借助Java模块系统,我们可以将我们的Java应用程序和Java包打包到Java模块中。Java模块允许我们指定哪些模块的包和其他Java模块可以看到。Java模块还列出了它运行所需的Java模块。

Java平台系统也被称为Java Jigsaw或项目Jigsaw。Jigsaw是它开发时使用的名称。开发此系统的主要目的是使JRE更具模块化。JPMS主要解决了一些重大问题,包括类路径/ JAR地狱,庞大的单体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注释之后,您会找到一个名为module section.base的文件夹,然后是exports行。格式有点晦涩,所以我们不会过多介绍。

如您所见,java.base模块导出了几个众所周知的Java包,包括java.io。这就是一个收集包的模块的功能。

JPMS:Java平台模块系统

指令的要求与导出相反。因此,模块可能对正在指定的模块有要求。您可以像运行Java编译器针对模块一样,指定模块路径,就像提供类路径一样。这样可以解决依赖关系。

向后兼容

Java 9考虑了向后兼容性。然而,新的模块结构是如此重大的变化,以至于您可能会遇到问题,特别是在大型代码库中。

以下命令可能对源自您的代码库的问题很有用 – 当将jdeps命令指向一个类时,它将查找任何依赖项和需要依赖项的模块。

如果您的依赖项引起问题,您可以希望您所依赖的包有一个与Java 9兼容的更新版本。如果没有,您可能需要寻找其他选择。

常见错误

如何解决java.lang.NoClassDefFoundError –

Javax/xml/bind/JAXBException

这是代码报错,指出找不到分配的类,因为它已经迁移到了没有对使用代码可见的模块。对此有几种解决方案。

JPMS是一个相当重要的变革,因此采用需要一些时间。幸运的是,因为Java 8是一个长期支持版本,没有紧迫的需求。

然而,从长远来看,旧项目需要迁移,新项目必须明智地使用模块,以便获得一些被赋予的效益。

结论

JPMS代表Java平台模块系统,也被称为项目拼图(project jigsaw)在其初始开发阶段。它使开发人员更容易组织大型应用程序和库。它改进了结构并增加了平台的安全性水平。它还用于改善应用程序性能,并对平台进行分解以适应更小的设备。其主要思想是使相关包的集合对模块可见,而将元素隐藏在模块外部消费者中。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程