Jigsaw 被推迟到了 Java SE 9

  • Alex Blewitt
  • 张龙

2013 年 1 月 14 日

话题:Java语言 & 开发架构

近日,Java Platform Group 的首席架构师 Mark Reinhold 在其博客上宣布添加模块化系统以及模块化 JDK 的提案被推迟到了 Java SE 9

虽然是个艰难的决定,但这么做可以确保将更多的精力放在模块化系统上,从而保证最终的正确性,这么做也不会延误 Java SE 8 的发布,Java SE 8 计划在今年 8 月发布。

这个决定让人想起 2010 年的执行计划Plan B,它将 Lambdas(即JSR 335)的加入推迟到了 JDK 7 发布后。这样,JDK 7 就在一年半前发布了(2011 年 7 月),距离之前的 JDK 6 发布过去了 4 年半。

为了保证稳定性与未来的路线图,JDK 将会每两年发布一次版本,同时会有一年两次的 Release Train,这类似于 Eclipse 每年的 Release Train——Reinhold表示 Eclipse 的 Release Train 的发布时间在夏末,正好是中间的时间点。

这样,大型组织就可以规划何时升级到新版本的 JDK 上去,并使用敏捷规划技术,根据已经完成的内容来进行日常发布,而不会导致匆忙发布或是延迟发布。

但遗憾的是,这意味着今年 8 月发布的 JDK 8 将不会有基于 Jigsaw 的模块化系统。引入模块化的延迟并不会对一般的开发者造成影响;但随着软件代码量的增长,模块化将会成为软件架构中的必要工具。诸如OSGiPojoSR之类的模块化系统已经为模块提供了运行时支持;模块化已经成为众多构建与运行时系统中的关键组成部分,对于企业应用服务器来说亦如此。

虽然可以在之后添加模块化支持,但随着代码基历史的不断增长(通常并没有使用模块化进行设计),找到适合的模块将成为一件棘手的事情。没多少人认为 JavaBeans API 需要依赖于 GUI;但 java.beans.Beans#instantiate() 却包含了指向 java.applet.AppletInitializer 的一个引用,这直接导致依赖了 java.awt 包。因此,为 JDK 寻找合适的模块依然是个巨大的挑战;随着包数量的不断增长,这些包之间不经意的依赖也会不断增加。java.lang、java.io 与 java.net 包彼此都包含了循环引用,这使得将其划分到不同模块变得异常艰难。

最后,Jigsaw 的延迟引入可以给 Oracle 与其他模块化专家提供更多的时间来精化提案并使用已有的想法与开发计划。正如 Mark 在其博客上说到,Jigsaw 的延迟并不是因为工作做得不够,也不是因为目前为止所取得的进展或实现不足,而是不想延误事先定好的 JDK 8 发布计划,也是为了确保 JDK 平台的模块化实现要成为最棒的实现。

查看英文原文:Jigsaw Deferred until Java SE 9

Java语言 & 开发架构