引言
Eclipse是流行的Java集成开发环境(IDE)。同时它还可以作为其它语言的开发环境(例如C++和Ruby)并且作为开发桌面或服务器应用程序的富客户端开发平台。如今,Eclipse开源社区拥有几十个开源项目,其范围从商务智能到社会网络等各个方面。Eclipse是非赢利性基金会的名字,由它全面负责这些工程。
Eclipse的每个版本在Eclipse的发行历史上都具有里程碑意义:在2006年6月30日同时发行了共十个Eclipse工程。本文将集中探讨Eclipse 3.2版本的IDE,非凡是它的Java开发工具(JDT)。
JDT构成
JDT的历史可以追踪到在1996年用Smalltalk编写的Visual Age for Java(VAJ)。在VAJ中,一切都被编译并且全部被调入内存。这种设计不能进行比例缩放,难于扩展,从而使其很难进行再创造。
在1999年,该IDE团队开始开发Visual Age Micro Edition(VAME)。这个工具开始完全用Java编写,并使用标准Widget工具箱(SWT)来实现其用户接口。当时的VAME的主要设计市场针对的是嵌入式空间中的开发与应用。为此,它使用了标准Java虚拟机,并且让工作区位于文件系统中。然而,文件和文件夹名字都是一些不能读的UUID。
与VAJ提供的编译器相比,VAME的增长式编译器快了将近十倍。这种模型是基于状态构建的(与当前的Eclipse形成对照,它是基于源码的)。VAME有它自己的仓库系统Rapier,并且可以使用插件方式来对之进行扩展。
VAME一开始并没有吸引社区开发者的注重力,但是其中的确包含很多好主意-开发者以后使用之来开发了他们的下一代工程-Eclipse。在2001年,Eclipse 1.0发行。当时,它被描述为"一种通用的IDE,并不非凡针对于什么内容"。从一开始,Eclipse和JDT都被构建为一种针对其它开发工具使用的开发平台。工作区存储在磁盘上并且对其它工作区开放。Eclipse 1.0中使用的不是一种专利式数据仓库,而是集成了CVS。
与其先行者相比,Eclipse还有另一个重要区别:它是开源的,而且其用户社区大量存在并且是自维持性的。Eclipse 3.2大多数的新的和改进特征直接来源于Eclipse用户。自从3.1版本以来,共有超过30,000个请求被修改并得到增强。去粗存精,下面让我们来重点分析几个对于大多数Java开发者非凡重要的特征。
Eclipse编译器
JDT的强有力的特征之一是它的内植的完全兼容于javac的增长式Java编译器。尽管你能使Eclipse使用Ant和javac,甚至能够使问题标记显示于IDE中(这是3.2版本中的新特征),但是,Eclipse编译器本身就提供了更好的诊断技术。
该JDT编译器最初的开发目的是针对VAME,以后针对Eclipse作了修改。这个编译器基于开发者称之的"编译三规则",并在模式上遵循了Asimov的机器人学规则:
1. 正确性-一个编译器不能损害一个源程序。
2. 高效性-除了与规则1相冲突的地方之外,一个编译器必须是快速的。
3. 友好性-一个编译器必须帮助用户纠正编程错误,只要这样的帮助不与规则1和规则2相冲突。
正确性:当设计一个Java编译器时,你不仅必须遵循相应的规范,而且还要领悟该规范的精神,只考虑正确性是不行的。因此,JDT开发者一直在努力奋斗以与其它编译器基本保持一致(包括Sun的编译器)。在Eclipse 3.2(相比之下,在VAJ中根本没有进行单元测试)中仅针对正确性的检查就超过15,000多次的单元测试。
高效性:成千的工程和成百万行的代码往往是很经常的事情。这意味着,大量的问题,例如内存消耗必须能够被猜测和加以分级,需要解决。Eclipse 3.2使用回归式优化策略对此作了进一步提炼。例如,开发者可以重写一个流程图以便使用位操作,结果它从以前百分之20的时间消耗降低到了百分之4。
友好性:报告错误是一种艺术,只用行号是不够的,二级错误被最小化。例如,假如你在一个文件中丢失了一个分号,它不会影响所有另外它所依靠的文件。改进的静态分析功能有助于发现错误模式。另外,Eclipse还能够对Javadoc进行正确性检查。
在3.2版本中,Eclipse编译器是Java-SE-6.0兼容的。Eclipse支持Java 6分类和StackMapTable属性(甚至在Java 6发行之前)。而且,该编译器提供了大量的新的诊断功能-有助于你发现存在于代码中的问题。与3.2版本的编译器(提供了45种诊断功能)相比,VAJ则仅提供了3种诊断功能。最新的一些诊断功能包括针对如下内容的检测:
· 使用显然是null的变量。
· 不必要的null检查。
· 到方法参数的偶然赋值。
· 切换大小写。
· 使用非泛型(原始)类型。
· 未使用的标签。
· 不必要的$NON-NLS$标签。
在默认情况下,大多数的这些功能都处于off状态。当然,你还可以使用@SuppressWarnings注解来把它们设置为off状态。
从3.2版本开始,假如你想在Eclipse外部使用Eclipse编译器,你可以单独下载这样的版本。它的命令行兼容于javac,并且下载尺寸仅有1MB左右。既然Eclipse编译器是开源的,所以大量的其它工程,例如Apache Tomcat,就可以绑定到其它的软件当中。