在发往jdk9-dev 邮件列表的一封邮件中,Alan Bateman 宣布Jigsaw 模块系统的一个快照版本将会合并到JDK9 开发分支的主线中。模块系统的状态文档最近进行了更新来表明它的进展,这是从Jigsaw 项目启动以来,它的变更第一次合并回来。
在历史上,Java 的开发在不同的分支下进行,因为它们是Mercurial 工具下不同的tree 。Hotspot 编译器(以及底层的VM 内容)是在Hotspot tree 中开发的,而Java 开发的主线是在jdk tree 中完成的。在Open JDK 的集合中,还有不同的tree 用于nashorn 甚至corba。这样造成的结果就是,每个分组就被称为forest,因为它们是相互关联的tree。(这种结构很大程度上是因为在创建项目的时候,Mercurial 没有轻量级的分支功能,并且它没有很好的跨分支push 的功能,所以它们都被分割为不同的repository,这也是为什么会有jdk8 和jdk8u forest 的原因,jdk8 实际上是主开发分支,而jdk8u 包含了其他repository 的fork,而且带上了特定的标签,如8u40 和8u60。幸好,所有的这些内容能够全部放到一个Git repository 之中,这其实是非常有价值的。)
Jigsaw 所引入的变化是很明显的,底层的包被划分成了不同的模块,每个模块包含一个或多个包。java.base
模块包含了标准库的主要内容(java.lang
、java.util
以及java.time
等)。这种划分会带来一定的破坏性,java.beans 包因为它与 AWT 和 Applets 的密切关联,被转移到了java.desktop
模块中,这就意味着在 java.base 包中,为PropertyChangeListener
实现监听器注册的类被移除掉了。
为了保证 JDK 9 和 Jigsaw 的开发不会遇到太多的困难,Jigsaw 实现是位于它自己的 forest 之中的。这样的话,通过 Oracle 和 Azul Zulu 得到的主线 OpenJDK Java 构建版本是不包含 Jigsaw 的,开发人员也无法进行尝试。而我们可以得到一个特殊的“早期可访问(early access)”构建版本,这个版本提供了 Jigsaw 的内容,但是并不包含 JDK 9 分支的一些其他变更。
所以,这封邮件确认 Oracle 将会尝试将并行开发的 Jigsaw forest 合并到 JDK9 forest 之中。一些重要的变更(如移除 PropertyChangeListeners)已经完成了,自动化的差异对比显示没有其他的功能移除了,不过包含了几百项对API 的添加/ 变更。为了尽可能减少额外出现的问题,JDK9 forest 将会锁定两周的时间,以便于将Jigsaw 相关的变更合并到主线的JDK9 forest 中。预期将会只有一个构建版本——也就是3 月21 日的JDK9+111——不过,Jigsaw 团队也申请预留了3 月27 日的JDK9+112 构建版本,以应对Jigsaw 可能出现的变化。
Jigsaw 模块后续的变更将会继续在 Jigsaw forest 中进行,因此针对 JDK9 主线的开发人员将不会处理由此导致的不稳定。但是,这个构建版本是第一次把 Java 的基础库划分为不同的模块,并且会在一个能够感知模块的系统中进行编译,因此希望能够避免将来在模块间添加功能所导致的问题。同时,Jigsaw forest 未来将会完全合并到 JDK9 中,它本身会被移除,不过这可能需要等到年底才会进行。
在合并之前,已经进行了一些评估,InfoQ 将会持续关注模块系统和Jigsaw 合并到JDK9 事宜的进展。
查看英文原文: Jigsaw Finally Arrives in JDK 9
评论