原文链接   译者:carvendy

JEP 200:模块化JDK

作者  Mark Reinhold

创建  2014/07/22 14:08

更新  2017/03/08 13:58

类型  特性

状态  集成

域   SE

JSR   376

讨论  拼图的开发在openjdk.java.net

努力  XL

持续时间  XL

优先  l

检验人 Alan Bateman, Alex Buckley, Paul Sandoz

支持  Brian Goetz

发行  9

版本  8051618

依赖  JEP 220:模块化运行时镜像

JEP 261:模块系统

JEP 201:模块化源码

概要

使用Java平台模块系统,由JSR 376明确规定和由JEP 261的实现,为了模块化JDK。

目标

划分JDK里面一系列的模块并可以在编译、构建的时候结合在一起,或者运行的时候进入各种各样的配置里面,但是没有限制:

配置相应的所有Java SE平台,所有JRE,和所有JDK。

配置相应相等的在每个契约配置项定义在Java SE 8;

自定义配置包含了只有明确规定的部分模块和通过这些模块传递所需的模块。

这些模块化结构的定义必须在标准模块之间有一个清晰区别,那些明确规定是Java程序社区支配,和模块是具体到JDK。它必须区分模块,模块将被提出包含Java SE平台的明确规定,从而制定了强制性的每个平台的实现,从所有其他模块中。

动机

拼图项目目的是为了设计和实现一个标准模块系统给Java SE 平台和允许系统到平台本身和到JDK。它最初的目的是制造实现平台可以更容易地拓展下至小设备,提高保护和可维护性,可以提高程序行为和提供开发者更好的工具为了更大的程序开发。

描述

设计原则

模块化结构提出了实现下面的原则:

标准模块化,那些明确规定的是由JCP支配,必须有名字并使用“java.”作为开头。

所有其他模块仅仅是JDK的你一部分,和必须有名字并起始为“.jdk”。

如果一个模块导出一个包包含public或protected成员,反过来,参考一种从其他模块,第一个模块必须给予暗示并可读的给到第二个,通过公共需求。(这确定方法调用链工作在明显的方式)

一个标准模块可能包含标准和不标准的API包。如果标准模块导出一份标准API包那么导出可能是合格的。如果标准模块导出了一个标准非标准API包那么就必须合格。在任何情况下,如果一个标准模块导出包有质量那么导出必须是一些JDK的模块。如果标准模块是一个Java SE模块等,为了提出包含Java SE平台明确规定,那么它就必须不能导出任何不是SE API的包,至少没有什么限制的。、

一个标准的模块可以依赖前面一个或者多个不标准模块。这不必授予暗指的并可读地对于任何非标准模块。如果它是Java SE模块那么它不必授予可读的对于任何非SE模块。

一个不标准模块不必导出任何标准的API包。一个不标准的模块可能授予暗指的可读性到一个标准的模块。

一个重要结果就是准则4和准则5是代码依赖在Java SE模块上,将只能依赖标准的Java SE类型,因此对于所有Java SE平台的实现是便携式的。

模块图

模块化结构JDK可以是虚拟的一个图:每个模块是一个节点,和这里有有向边从一个模块到另外一个如果第一个依赖上面的第二个。所有模块图有很多边界更容易地展示;这里是图的传递性约简,在这些冗余的边界是省略的(点击可以更大)。

附上模块图的旅游指南

标准的Java SE 模块是橙色的;非SE模块是蓝色的。

如果一个模块依赖上面其他的,和它授予了暗示可读的模块,那么边界从第一个到第二个是可靠的;因此,边界是虚线的。

在非常底层的java.base模块,包含本质的类例如 java.lang.Object和java.lang.String。基础模块没有依赖上面的模块,和每个其他模块依赖上面的基础模块。基础模块的边界是比其他的要轻量。

在顶层的java.se.module模块,集成 了所有模块包含了Java SE平台,导入模块是Java EE平台明确规定的。这是一个聚合模块的例子,收集和复出口其他模块的内容但是加入了它自己没有内容。一个运行时系统配置包含java.se.ee模块将包含Java SE平台的所有API包。一个模块将提出包含Java SE平台规范,只是如果,它是一个标准模块可以从java.se.ee模块获取。

java.se 聚合模块集合Java SE平台的部分模块,内容没有和Java EE重叠。

java.compact1,java.compact2,和java.compact3 聚合模块实现了Java SE 契约配置。这里有一个非标准的jdk.compact3模块因为一个compact3 构建的JDK包含一些非标的SE API包,当其他契约配置构建没执行。

其他非标准模块包含调试和服务工具和API(例如:jdk,jdi,jdk.jcmd和jdk.jconsole),开发工具(例如:jdk.compiler,jdk.javadoc,和jdk.xml.bind),和各种各样服务提供者(例如:jdk.charsets, jdk.scripting.nashorn, jdk.crypto.ec ),这些是制造可获得其他模块通过存在的java.util.ServiceLoader机制。

java.smartcardio模块是标准的但是不是Java SE平台规范的一部分,由此可见它的名字前缀是“java.”但是它是蓝色的,和it没有到达java.se模块。

模块图是有效的,一个新类型的API,它将被明确规定的和进化的等。模块的子图基于java.se.ee模块,和所有非SE模块,相应边界移除将被提出包含Java SE 平台规范;它的进化将在此后被JCP支配。图的剩余进化将被未来的JEPs覆盖。在另一面,如果一个是指定作为平常可用的而它将受到进化的约束管制作为其他APIs。移除一个模块或者当改变它,在原则上,将需要公共公告至少提前在一个主发行版本。

一个表格概述所有模块,包含构建Linux/AMD64足迹,这里是可用。

开放版本

当前模块图定义至少有一个知道的缺陷,列表底下。修复版本将在修改内容可能的结果和图结构。

java.management模块依赖上面的java.rmi,它自己是非平凡的大小和经常不是重要的在嵌入驱动情节;我们看着移动的java.management.remote.rmi API包在自己的模块里面。

测试

单元测试和回归测试在JDK和jtreg中,系带用于运行它们,将增强允许测试被选中的基础模块,那些它们测试和上面它们的依赖,所以任意的JDK模块配置可以被测试。

最初的增强功能测试将用于检查模块的配置集合,确认它是有效的模块定义结合成的,每个模块有预期望的内容和输出预期的API包,和模块有预期依赖关系。

JCK必须被增强地测试模块图的各个方面,那些变成Java SE平台规范的一部分。包含SE模块的名字,它们输出的API包和依赖持有它们,因此SE API包被重新导出。在在平台的实现中,JCK必须被增强测试目前SE模块的任意配置。

风险和假设

模块化结构定义在这里不解决一些重要的用例。如果在JEP实现首次发行中批判用例是不支持的 而我们希望可以它可以在后面的发行中重构模块图、

Java SE方面的模块图定义在JEP,注意,被提出最终的Java SE平台JSR专家组审查代码和标准化。审查代码可能要求对图进一步更改。

依赖

JEP是拼图项目的一部分。其他JEP是:

java8 模块化_JEP 200:模块化JDK相关推荐

  1. linux模块化机制,Linux模块化机制和module_init

    > 引子:模块化机制优点 模块化机制(module)是Linux系统的一大创新,是Linux驱动开发和运行的基础(当然,module并不仅仅是支撑驱动).其优点在于: 1.在系统运行动态加载模块 ...

  2. 模块化服务器供电系统,供电系统的模块化设计与模块化UPS详解.PDF

    供电系统的模块化设计与模块化UPS 张广明 中国电源协会副理事长 摘 要 系统模块化是数据中心基础设施设计的重要理念和基本策略,数据中心设计建造中的很多问题都与系统模 块化程度有关.模块化以及与之关系 ...

  3. 编程思想-模块化-模块化设计:模块化设计

    ylbtech-编程思想-模块化-模块化设计:模块化设计 模块化设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序.子程序.子过程等框架把软件的主要结构和流程描述出来,并 ...

  4. js模块化html,js模块化框架

    javascript模块化是什么及其优缺点介绍 如今backbone.emberjs.spinejs.batmanjs 等MVC框架侵袭而来.CommonJS.AMD.NodeJS.RequireJS ...

  5. 前端开发——模块化(css模块化开发)

    掌握模块化开发的思想是我们进行模块化开发的基础.他有以下几部分组成: 1.css模块化 2.html模块化 3.js模块化 模块化开发的优势 1.更好的组织和维护代码 2.按需加载 3.避免命名冲突 ...

  6. 编程思想-模块化-模块化程序设计:模块化程序设计

    ylbtech-编程思想-模块化-模块化程序设计:模块化程序设计 模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要 ...

  7. java11模块化开发_【JDK 11】关于 Java 模块系统,看这一篇就够了

    继 2014 年 3 月 Java 8 发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Supp ...

  8. java 模块化osgi_OSGi简介–模块化Java

    java 模块化osgi OSGi联盟是这种搁浅的管理机构,它始于1999年.其最初目标是为网络设备创建开放搁浅. 基于此思想,此规范也针对Java引入. Eclipse在Java中是第一个. 他们于 ...

  9. PHP 框架 模块化,Laravel 的模块化开发框架 Notadd RC1

    本文我们要和大家分享 Laravel 的模块化开发框架 Notadd RC1 的介绍,它的优点是修复了首页编辑模式下滚动的BUG (@Eleven),修复了后台菜单管理修改后不跳转的BUG (@gan ...

最新文章

  1. 人人网 6.0 版申请页面随着滚动条拖动背景图片滚动出现的原理
  2. hello world!!(Java)
  3. 将ssm项目和普通java项目打包
  4. Codeforces round 1083
  5. 右键快捷VsCode
  6. python槽怎么用_【Python成长之路】从零学GUI -- 多窗口跳转(信号与槽函数用法)...
  7. php private ,public protected三者的区别
  8. hive字段名、注释中文显示问号
  9. 高性能服务框架-Dubbo实战教程,看这一篇就够了
  10. 写在博客文章后,关于为什么要写博客,特此提醒自己。
  11. 期末排名算不算计算机成绩,智学网怎么看年级排名 智学网如何查看期末考试成绩...
  12. TJX theft tops 45.6 million card numbers——TJX公司被盗取45600000卡号
  13. C语言将数字转成大写中文数字
  14. Mac相机不可用怎么办?教你恢复相机连接的方法
  15. Android win10 平板 省电,小编解答win10系统Mobile设置更省电的图文办法
  16. 怎么去学习绘画格子裙?该怎么画格子裙?
  17. SPI通讯介绍 以及读写W25Q64(块,扇区,页的区别)
  18. pycharm社区版安装及使用教程(win10系统)
  19. MATLAB boxplot 修改箱子线型、设置箱子颜色、不同长度数据画箱线图、中位线改成黑色、箱线图虚线改实线
  20. Java split()用法,使用特殊字符要注意了

热门文章

  1. Codeforces 355C 策略题
  2. 莱卡荧光共聚焦显微镜
  3. canvas绘制心电图(js读取csv心电数据文件)
  4. 自学编程的人,都是怎么找到第一份软件开发工作的?
  5. 【数据结构】通讯录整理
  6. MasterAlign对位时间长异常处理
  7. ARM测试题总结(一)
  8. RS232 RTS和CTS是什么意思
  9. duo是什么意思_DUO是什么?
  10. Matrix Marker稀疏矩阵文件存储格式