fbpx
维基百科

Java平台模块系统

Java平台模块系统Java Platform Module System,简称JPMS[1]指定了Java代码和相关资源的集合的分发格式。它还指定了一个用于存储这些集合,或者说模块的存储库,并确定如何发现、加载它们,以及检查它们的完整性。它包含了命名空间等功能,旨在修复已有JAR格式中的一些缺点,尤其是JAR地狱,这可能导致类路径和类加载等问题。

Java模块系统最初是在JCP下开发的,称为JSR 277,并计划与Java 7一起发布。

后来,JSR 277被搁置,并创建了Jigsaw项目[2]来将JDK模块化。该JSR已被JSR 376(Java平台模块系统)取代。

Jigsaw项目最初打算用于Java 7(2011年),但被推迟到Java 8(2014年),作为备用计划的一部分,[3]后再次被推迟到2017年的Java 9版本。[4]包含了Java模块系统的Java 9于2017年9月21日发布。[5]

架构 编辑

Java 9中实现的Java模块系统包括以下JEP英语JDK Enhancement ProposalJSR(Java规范请求)[2]

  • JEP 200:模块化JDK:定义JDK的模块化结构
  • JEP 201:模块化源代码:将JDK源码按模块化重新组织,增强构建系统来编译模块,并在构建时强制执行模块边界
  • JEP 220:模块化运行时映像:重构JDK和JRE运行时映像,以适应模块并提高性能、安全性和可维护性
  • JEP 261:模块系统:实现Java平台模块系统
  • JEP 282:Java链接器:创建工具以将一组模块及其依赖项组装和优化为自定义运行时映像[6]
  • JSR 376:Java平台模块系统[1]

此外,JDK 9还添加了其它几项功能,来轻松过渡到模块系统:

  • JEP 238:多版本JAR文件:扩展JAR文件格式,以便多个特定于Java版本的类文件版本可以共存于单个存档中。[7]
  • JEP 253:为模块化准备JavaFX UI控件和CSS API:为JavaFX功能定义公共API,这些功能目前只能通过内部API获得,并将因模块化而变得无法访问。[8]
  • JEP 260:封装大多数内部API:使大多数JDK的内部API默认不可访问,但保留一些关键的、广泛使用的内部API可以访问,直到其全部或大部分功能存在受支持的替代品为止。[9]
  • JEP 275:模块化Java应用程序的打包:Java打包器英语Java packager将针对JDK 9进行改进,以使其能够识别模块,例如可以打包一个模块及其依赖的所有模块。[10]

模块的属性 编辑

模块是一种新的代码组织方式。与JAR文件相反,模块显式声明它们依赖哪些模块,以及导出哪些包。[11]显式依赖关系声明可以更轻松地推理大型应用程序与软件组件之间的依赖关系,从而提高代码完整性。

模块声明放在module-info.java文件中,该文件位于模块源文件层次结构的根目录。在编译时和运行时,JDK都会验证模块之间的依赖关系以及交互。

例如,以下就是一个模块声明。它声明模块com.foo.bar依赖于另一个模块com.foo.baz,并导出com.foo.bar.alpha和com.foo.bar.beta两个包。

module com.foo.bar { requires com.foo.baz; exports com.foo.bar.alpha; exports com.foo.bar.beta; } 

com.foo.bar.alpha和com.foo.bar.beta两个包中的公有成员将可由依赖模块访问。而私有成员则无法访问,即使通过反射等手段也不行。请注意,在Java 9到Java 16中,是否允许这种“非法访问”,事实上取决于命令行设置。[12]

JDK自身在Java 9中已经被模块化。[13]

与OSGi的链接 编辑

Java模块系统并不打算支持OSGi平台当前支持的所有功能(例如生命周期模型和服务注册表)。但Java模块系统也支持某些OSGi不支持的功能,例如编译时的模块化,以及内置支持native库。[14]2016年有几篇探讨Java模块系统和OSGi如何互操作的文章,可以在InfoQ[15],以及OSGi联盟博客[16]上找到。

参见 编辑

  • Java包英语Java package
  • 类路径英语Classpath
  • Java类加载器

参考资料 编辑

  1. ^ 1.0 1.1 Java Platform Module System (JSR 376) [Java平台模块系统(JSR 376)]. 甲骨文公司. [2018-07-02] (英语). 
  2. ^ 2.0 2.1 Project Jigsaw [Jigsaw项目]. 甲骨文公司. [2015-11-29] (英语). 
  3. ^ Mark Reinhold. It's time for … Plan B [是时候……实施B计划了]. 甲骨文公司. 2009-09-20 [2017-06-21] (英语). 
  4. ^ JDK 9. 甲骨文公司. [2016-02-24] (英语). 
  5. ^ Java 9: Release date and new features [Java 9:发布日期和新功能]. techworld.com. 2017-07-21 [2017-11-18] (英语). 
  6. ^ jlink: The Java Linker (JSR 282) [jlink:Java链接器(JSR 282)]. 甲骨文公司. [2016-03-12] (英语). 
  7. ^ JEP 238: Multi-Release JAR Files [JEP 238:多版本JAR文件]. 甲骨文公司. [2017-07-31] (英语). 
  8. ^ JEP 253: Prepare JavaFX UI Controls & CSS APIs for Modularization [JEP 253:为模块化准备JavaFX UI控件和CSS API]. 甲骨文公司. [2017-07-31] (英语). 
  9. ^ JEP 260: Encapsulate Most Internal APIs [JEP 260:封装大多数内部API]. 甲骨文公司. [2017-07-31] (英语). 
  10. ^ JEP 275: Modular Java Application Packaging [JEP 275:模块化Java应用程序的打包]. 甲骨文公司. [2017-07-31] (英语). 
  11. ^ Mark Reinhold. The State of the Module System [模块系统的状态]. 甲骨文公司. 2016-03-08 [2017-02-18] (英语). 
  12. ^ JEP 396: Strongly Encapsulate JDK Internals by Default [JEP 396:JDK内部默认强封装]. [2021-02-06] (英语). 
  13. ^ . 甲骨文公司. 2016-06-24 [2017-02-18]. (原始内容存档于2015-12-08) (英语). 
  14. ^ Mark Reinhold. Project Jigsaw: Late for the train: The Q&A [Jigsaw项目:迟到的问答]. 甲骨文公司. 2012-08-24 [2015-11-29] (英语). 
  15. ^ Java 9, OSGi and the Future of Modularity [Java 9、OSGi与模块化的未来]. InfoQ. [2016-09-26] (英语). 
  16. ^ Java Module Layers and OSGi Bundles [Java 模块层与OSGi Bundles]. OSGi Alliance. [2016-08-01] (英语). 

外部链接 编辑

  • JSR 277 (英语). 
  • JSR 294 (英语). 
  • JSR 376 (英语). 
  • Project Jigsaw [Jigsaw项目] (英语). 
  • The State of the Module System [模块系统的状态] (英语). 
  • Java Platform Module System: Issue Summary [Java 平台模块系统:问题摘要] (英语). 

java平台模块系统, java, platform, module, system, 简称jpms, 指定了java代码和相关资源的集合的分发格式, 它还指定了一个用于存储这些集合, 或者说模块的存储库, 并确定如何发现, 加载它们, 以及检查它们的完整性, 它包含了命名空间等功能, 旨在修复已有jar格式中的一些缺点, 尤其是jar地狱, 这可能导致类路径和类加载等问题, java模块系统最初是在jcp下开发的, 称为jsr, 并计划与java, 7一起发布, 后来, 277被搁置, 并创建了jigsaw项目,. Java平台模块系统 Java Platform Module System 简称JPMS 1 指定了Java代码和相关资源的集合的分发格式 它还指定了一个用于存储这些集合 或者说模块的存储库 并确定如何发现 加载它们 以及检查它们的完整性 它包含了命名空间等功能 旨在修复已有JAR格式中的一些缺点 尤其是JAR地狱 这可能导致类路径和类加载等问题 Java模块系统最初是在JCP下开发的 称为JSR 277 并计划与Java 7一起发布 后来 JSR 277被搁置 并创建了Jigsaw项目 2 来将JDK模块化 该JSR已被JSR 376 Java平台模块系统 取代 Jigsaw项目最初打算用于Java 7 2011年 但被推迟到Java 8 2014年 作为备用计划的一部分 3 后再次被推迟到2017年的Java 9版本 4 包含了Java模块系统的Java 9于2017年9月21日发布 5 目录 1 架构 2 模块的属性 3 与OSGi的链接 4 参见 5 参考资料 6 外部链接架构 编辑Java 9中实现的Java模块系统包括以下JEP 英语 JDK Enhancement Proposal 和JSR Java规范请求 2 JEP 200 模块化JDK 定义JDK的模块化结构 JEP 201 模块化源代码 将JDK源码按模块化重新组织 增强构建系统来编译模块 并在构建时强制执行模块边界 JEP 220 模块化运行时映像 重构JDK和JRE运行时映像 以适应模块并提高性能 安全性和可维护性 JEP 261 模块系统 实现Java平台模块系统 JEP 282 Java链接器 创建工具以将一组模块及其依赖项组装和优化为自定义运行时映像 6 JSR 376 Java平台模块系统 1 此外 JDK 9还添加了其它几项功能 来轻松过渡到模块系统 JEP 238 多版本JAR文件 扩展JAR文件格式 以便多个特定于Java版本的类文件版本可以共存于单个存档中 7 JEP 253 为模块化准备JavaFX UI控件和CSS API 为JavaFX功能定义公共API 这些功能目前只能通过内部API获得 并将因模块化而变得无法访问 8 JEP 260 封装大多数内部API 使大多数JDK的内部API默认不可访问 但保留一些关键的 广泛使用的内部API可以访问 直到其全部或大部分功能存在受支持的替代品为止 9 JEP 275 模块化Java应用程序的打包 Java打包器 英语 Java packager 将针对JDK 9进行改进 以使其能够识别模块 例如可以打包一个模块及其依赖的所有模块 10 模块的属性 编辑模块是一种新的代码组织方式 与JAR文件相反 模块显式声明它们依赖哪些模块 以及导出哪些包 11 显式依赖关系声明可以更轻松地推理大型应用程序与软件组件之间的依赖关系 从而提高代码完整性 模块声明放在module info java文件中 该文件位于模块源文件层次结构的根目录 在编译时和运行时 JDK都会验证模块之间的依赖关系以及交互 例如 以下就是一个模块声明 它声明模块com foo bar依赖于另一个模块com foo baz 并导出com foo bar alpha和com foo bar beta两个包 module com foo bar requires com foo baz exports com foo bar alpha exports com foo bar beta com foo bar alpha和com foo bar beta两个包中的公有成员将可由依赖模块访问 而私有成员则无法访问 即使通过反射等手段也不行 请注意 在Java 9到Java 16中 是否允许这种 非法访问 事实上取决于命令行设置 12 JDK自身在Java 9中已经被模块化 13 与OSGi的链接 编辑Java模块系统并不打算支持OSGi平台当前支持的所有功能 例如生命周期模型和服务注册表 但Java模块系统也支持某些OSGi不支持的功能 例如编译时的模块化 以及内置支持native库 14 2016年有几篇探讨Java模块系统和OSGi如何互操作的文章 可以在InfoQ 15 以及OSGi联盟博客 16 上找到 参见 编辑Java包 英语 Java package 类路径 英语 Classpath Java类加载器参考资料 编辑 1 0 1 1 Java Platform Module System JSR 376 Java平台模块系统 JSR 376 甲骨文公司 2018 07 02 英语 2 0 2 1 Project Jigsaw Jigsaw项目 甲骨文公司 2015 11 29 英语 Mark Reinhold It s time for Plan B 是时候 实施B计划了 甲骨文公司 2009 09 20 2017 06 21 英语 JDK 9 甲骨文公司 2016 02 24 英语 Java 9 Release date and new features Java 9 发布日期和新功能 techworld com 2017 07 21 2017 11 18 英语 jlink The Java Linker JSR 282 jlink Java链接器 JSR 282 甲骨文公司 2016 03 12 英语 JEP 238 Multi Release JAR Files JEP 238 多版本JAR文件 甲骨文公司 2017 07 31 英语 JEP 253 Prepare JavaFX UI Controls amp CSS APIs for Modularization JEP 253 为模块化准备JavaFX UI控件和CSS API 甲骨文公司 2017 07 31 英语 JEP 260 Encapsulate Most Internal APIs JEP 260 封装大多数内部API 甲骨文公司 2017 07 31 英语 JEP 275 Modular Java Application Packaging JEP 275 模块化Java应用程序的打包 甲骨文公司 2017 07 31 英语 Mark Reinhold The State of the Module System 模块系统的状态 甲骨文公司 2016 03 08 2017 02 18 英语 JEP 396 Strongly Encapsulate JDK Internals by Default JEP 396 JDK内部默认强封装 2021 02 06 英语 JDK Module Summary JDK模块总结 甲骨文公司 2016 06 24 2017 02 18 原始内容存档于2015 12 08 英语 Mark Reinhold Project Jigsaw Late for the train The Q amp A Jigsaw项目 迟到的问答 甲骨文公司 2012 08 24 2015 11 29 英语 Java 9 OSGi and the Future of Modularity Java 9 OSGi与模块化的未来 InfoQ 2016 09 26 英语 Java Module Layers and OSGi Bundles Java 模块层与OSGi Bundles OSGi Alliance 2016 08 01 英语 外部链接 编辑JSR 277 英语 JSR 294 英语 JSR 376 英语 Project Jigsaw Jigsaw项目 英语 The State of the Module System 模块系统的状态 英语 Java Platform Module System Issue Summary Java 平台模块系统 问题摘要 英语 取自 https zh wikipedia org w index php title Java平台模块系统 amp oldid 80016727, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。