近日,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的模块化系统。引入模块化的延迟并不会对一般的开发者造成影响;但随着软件代码量的增长,模块化将会成为软件架构中的必要工具。诸如OSGi与PojoSR之类的模块化系统已经为模块提供了运行时支持;模块化已经成为众多构建与运行时系统中的关键组成部分,对于企业应用服务器来说亦如此。
虽然可以在之后添加模块化支持,但随着代码基历史的不断增长(通常并没有使用模块化进行设计),找到适合的模块将成为一件棘手的事情。没多少人认为 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平台的模块化实现要成为最棒的实现。