早在 2012 年 8 月,在 Java 平台首席架构师 Mark Reinhold 宣布模块化项目Jigsaw 之后不久, JEP 162 这一题为“准备模块化”的提案就指出,在 Jigsaw 项目中为模块化系统开发的代码不会集成到 JDK 8 中。那次延期直接将模块化支持推迟到 JDK 9,最早也得到 2016 年。
不过,Oracle 近来加快了向 Java 引入模块化系统的步伐。2014 年 8 月,Oracle 将经过重组的源代码( JEP 201 )合并到 JDK 9 build 27 中。近日,他们又将重构过的运行时( JEP 220 )合并到 JDK 9 build 41 中,以下是其中几项比较重大的变化:
- JDK 中不再包含 JRE 子目录;
- 停用授权标准覆盖机制,删除相应的实现代码,用可升级的模块取代它,JDK 中不再包含系统属性 java.endorsed.dirs 及目录 lib/endorsed;
- 停用扩展机制,删除相应的实现代码,类似地,JDK 中不再包含系统属性 java.ext.dirs 及目录 lib/ext,但一些与扩展机制相关的 Manifest 属性,如 Class-Path、Sealed 等,还会保留;
- 删除 rt.jar、tools.jar、dt.jar 以及其它各种内部 JAR 包,其中的类和资源文件存储在一种名为 jimage 的更加高效的格式中。需要直接访问 rt.jar 的工具可以使用一个内部 NIO 文件系统提供程序访问运行时中的类和资源文件;
- 子目录 lib 中的配置文件.properties、.policy 移到新目录 conf 中,其它计划由开发人员、部署人员和终端用户修改的配置文件也保存在该目录中;
- 为模块、类和资源引入一种新的 URI 命名规则 jrt,它隐藏了 JDK 内部结构或格式,其语法为 jrt:/[$MODULE[/$PATH]]。
Oracle 后续还会引入其它一些变化,但 Reinhold 明确指出,在所有已计划的变化中,上述变化是最重大的。他还特别强调,他们并没有提议删除一般用途的 JAR 包,而只是删除 JRE 和 JDK 中的。
接下来,根据Mark Reinhold 的计划,还将有第四项提案。该提案将引入模块化系统本身,而且会与模块化系统 JSR 保持一致。
感兴趣的读者可以从官方网站上下载 Java 9 早期试用版。有一点需要注意,该版本不支持 Windows XP。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论