搜索
首页Javajava教程JPMS:Java 平台模块系统

JPMS:Java 平台模块系统

Sep 24, 2023 pm 05:05 PM

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。这就是收集包的模块的工作原理。

JPMS:Java 平台模块系统

指令的要求与导出相反。因此,所指定的模块可能需要一个模块。指定模块路径的方式与在针对模块运行 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 平台模块系统的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:tutorialspoint。如有侵权,请联系admin@php.cn删除
如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?Mar 17, 2025 pm 05:46 PM

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?Mar 17, 2025 pm 05:44 PM

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?Mar 17, 2025 pm 05:43 PM

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Mar 17, 2025 pm 05:35 PM

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)