Oracle 开始从 Java 运行时中移除 JAR 包

阅读数:37 2014 年 12 月 24 日

话题:JavaOracle语言 & 开发架构

早在 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)关注我们,并与我们的编辑和其他读者朋友交流。