快速业务通道

模块化Java简介 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
非GUI模块(headless builds、分析及错误检查等等)。

除了作为整体的rt.jar之外,任何其他系统都可以被分解为不同的模块。问题是这么 做是否值得?毕竟,从头构建一个模块化系统比起把一个单模块系统分割成多个模块要容 易得多。

之所以这样,原因之一是跨越模块边界的类泄漏。例如,java.beans包逻辑上不应该 依赖于任何GUI代码;可是Beans.instantiate()所使用的java.beans.AppletInitializer 引用了Applet,这必然导致对整个AWT的依赖。因此从技术上讲java.beans有依赖于AWT的 选项,尽管常识告诉我们不应该有。如果核心java类库从一开始就采用了模块化方法来构 建,那么这种错误早在API公布之前就发现了。

有些情况下,一个模块看上去不能再被划分成子模块了。可是,有时候相关功能保持 在同一个模块中是为了便于组织,当需要的时候还可以再进一步分解。例如,对重构的支 持起初是Eclipse JDT的一部分,现在被抽出为一个模块,以便其他语言(如CDT)利用其 重构能力。

Plugins

许多系统都是通过plugin概念进行扩展的。在这种情况下,宿主系统定义了一套 plugin必须遵循的API及plugin注入方式。许多应用(如Web浏览器、IDE及构建工具)通 常都是通过提供带有适当API的插件来对应用进行定制的。

有时候这些plugin受到限制或只有一些普通操作(音频或视频解码),但是组织起来 效果也非常不错(例如,IDE的众多plugin)。有时候,这些 plugin可以提供自己的 plugin,以便进一步定制行为,使得系统具有更高可定制性。(可是,增加这些中间层级 会使系统难以理解。)

这种plugin API成为各个plugin必须遵守的契约的一部分。这些plugin自己也是模块 ,也面临依赖链和版本问题。由于(特定)plugin API演化的复杂性,因此plugin自己也 面临这一问题(必须维持向后兼容性)。

Netscape plugin API成功的原因之一是其简单性:只需实现少量的函数。只要宿主浏 览器用适当的MIME类型将输入重定向,plugin就可以处理其他事情。可是,更复杂的应用 (如IDE)通常需要更紧密集成各个模块,因此需要一个更复杂的API来推动。

Java模块化的当前状态

目前,Java领域存在许多模块化系统和plugin体系。IDE是名气最大的,IntelliJ、 NetBeans和Eclipse都提供了其自己的 plugin系统作为其定制途径。而且,构建系统 (Ant、Maven)甚至终端用户应用(Lotus Notes、Mac AppleScript应用)都有能够扩展 应用或系统核心功能的概念。

OSGi是Java领域里无可辩驳的最成熟的模块系统,它与Java几乎是如影相随,最早出 现于JSR 8,但是最新规范是JSR 291。 OSGi在JAR的MANIFEST.MF文件中定义了额外的元 数据,用来指明每个包所要求的依赖。这就让模块能够(在运行时)检查其依赖是否满足 要求,另外,可以让每个模块有自己的私有 classpath(因为每个模块都有一个 ClassLoader)。这可以让dependency hell尽早被发现,但是不能完全避免。和JDBC一样 ,OSGi也是规范(目前是4.2版),有多个开源(及商业)实现。因为模块不需要依赖任 何OSGi的特定代码,许多开源类库现在都将其元信息嵌入到manifest中,以便OSGi运行时 使用。有些程序包没有这么做,也可以用bnd这样的工具,它可以处理一个已有的JAR文件 并为其产生合适的默认元信息。自2004年Eclipse 3.0 从专有plugin系统切换到OSGi之后 ,许多其他专有内核系统(JBoss、WebSphere、Weblogic)也都随之将其运行时转向基于 OSGi内核。

最近创建的Jigsaw项目是为了模块化JDK自身。尽管其是JDK内部的一部分,并且很可 能在其他SE 7 实现中不被支持,但是在该JDK之外使用Jigsaw并无限制。尽管仍在开发当 中,Jigsaw还很可能成为前面提到的JSR 294的参考实现。最低要求SE 7(加上目前还没 有Java 7的事实)说明

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号