Jigsaw——JSR277 的丧钟?

  • Alex Blewitt
  • 张龙

2008 年 12 月 23 日

话题:Java语言 & 开发

紧跟着早前发布的关于模块化 JDK 的声明(InfoQ 之前曾报道过),Mark Reinhold 宣布Jigsaw 项目成为OpenJDK的一部分。下面的内容援引了其声明:

为了在接下来的几年中能够模块化 JDK 7,同时也为了更好地宣传 JSR 294 的工作,Sun 打算不久之后在 OpenJDK 社区中创建 Jigsaw 项目。

该努力必然会创建一个简单、低层次的模块系统,其设计将聚焦于模块化 JDK 这个目标。开发者可以在自己的代码中使用该模块系统,Sun 也会全力支持该系统,但它并不会成为官方 Java SE 7 平台规范的一部分,也不一定会得到其他 SE 7 实现的支持。

如果未来的 Java SE 平台包含了特定的模块系统,那么 Sun 将提供一种方式来移植 Jigsaw 模块以使之符合相应的标准。同时,我们还会积极地寻求与其他模块系统交互的方式,尤其是 OSGi。

模块化 JDK 这个目标应该是可以实现的,尤其是Apache Harmony已经证明了 JDK 是可以被模块化的(使用 OSGi)。然而这个目标却因另一个原因而变得更加有趣:它将在 JCP 外实现

由于缺少可视化的发展过程,再加上闭门造车的实现,对于大多数人来说很难参与进JSR 277,更别提对其献计献策了。通常这会导致标准的误入歧途,使得标准过于关注实现的细节而忽视了通用性。不仅如此,这还会导致标准成为事后诸葛亮——想解决问题时(例如奇数的版本号)却发现已经太迟了。根据声明所述,JSR277 还处于“领导地位”,但它实际已死。

从 JSR277 中分离出的JSR294(以前可是个庞然大物,不过现在已经模块化了)是个很大的进步;它将引入一些语言上的变化,这会使得模块化的实现独立于任何特定的模块化进程。

从声明中看到的激动人心的事情还有 OSGi 已经成为模块化的事实上的标准了,这种合作是件好事。但这不一定意味着它将基于 OSGi 实现,事实上,它只是建议最好与 OSGi 而不是其他方式合作:

JSR 277 的 JAM 模块系统并不适合作为模块化 JDK 的基础,那么 OSGi 框架如何呢?该模块系统非常成熟、稳定和健壮。其核心甚至已经在 Java 虚拟机中实现出来了,也就是 Apache Harmony。OSGi 并没有与 Java 语言集成,相反,它构建在 Java SE 平台之上而不是其中。

这最后的问题也能解决。Sun 现在计划直接与 OSGi 联盟合作以便 OSGi 框架的未来版本能充分利用 JSR 294 的特性进而能和语言集成的更加紧密。

我相信未来的 OSGi 标准会使用 JSR 294 的模块,尽管还有一些建议的改变。不管怎么样,下周在Devoxx 08举办的Modularity in Java讲座应该会对 Java 的未来做出一些有趣的预言。

查看英文原文:Jigsaw - the death knell of JSR277?

Java语言 & 开发