Gary Chan
铁匠以打造自己的工具为荣。在进入这个行当之时,或者接受有特殊需求的任务之际,制作称手的工具便成了头等大事。通过炼炉、铁砧以及锤子,铁匠循环着加热、锻造和冷却过程,直到把钢铁铸造成称手的家伙。
一、序言
与铁匠的挥洒汗水和忍受高温相比,软件开发是一个即干净又抽象的过程。不过,代码与钢铁的相同之处就是他们都有延展性——足够的技巧和努力,你可以把钢铁或者代码变成精致的工具或者是巨大的工程体系奇观。
上回我们品尝第一杯咖啡时,虽然只说出了第一句“Hello, world!”,手工编写、编译、调试、运行Java程序,一定让你手忙脚乱,饱尝Java咖啡的苦涩。若要完成一个大型的项目,这样的徒手作业无异于愚公移山。
正如红粉于佳人、宝剑于君子,对Java开发者来说,没有什么能够比得心应手的集成开发环境(Integrated Development Environment,简称IDE)更令人着迷。所谓IDE,就是把编写、编译、调试、运行集成在一个统一的开发环境中的软件,并且还增加了许多提高开发效率的实用功能,比如高级的编辑功能、自动进行编译、设置断点逐步调试、在IDE内部显示运行结果,等等。徒手开发好比刀耕火种,用IDE可谓进入了蒸汽时代了。
十年之前,由于技术所限,IDE还是奢侈品。随着科技的飞速发展,十年之后的今天,界面易用、功能强大、速度飞快的IDE已经无法成为人们热衷的话题,即便免费也无法成为怦然心动的唯一理由。套用经济学术语,人们渴望的不仅仅是一个传统的IDE,而是一种边际效应递增的开发工具——更多的可用资源,更高的开发效率,更合理的开发方法,以及更保值的知识投入——免费当然再好不过了。
Eclipse就是这样一个开发工具——开放源代码、免费、优秀的厂商支持,并且拥有丰富的扩展资源。
二、Eclipse
2.1、Eclipse的历史
Eclipse的前身是IBM的Visual Age for Java(简称VA4J),把这个项目免费赠送给Eclipse社团(www.eclipse.org)之前,IBM已经投入超过四千万美元的研发费用。Eclipse社团的创始人还包括Borland、Merant、QNX Software Systems、Rational Software、Red Hat、SuSE、TogetherSoft和Webgain,后来加入的还有Oracle等公司,实力相当雄厚。如今,IBM通过附属的研发机构Object Technologies International(简称OTI),继续领导着Eclipse的开发。
黄糖故事 OTI的传说
OTI是杰出的面向对象开发工具的研究组织。早在1988,他们对Smalltalk已经有了深入的研究。在前面的黄糖故事中我们已经介绍过,Smalltalk是第一个完全面向对象的动态计算机程序设计语言。1996年加入IBM之后,他们推动了IBM著名的Visual Age系列开发工具的生产。实际上,IBM当时的VA4J是用Smalltalk编写的,并且为Java融入了许多Smalltalk的先进理念,比如没有“文件”的概念,版本控制被提高到方法学的层次。
Eclipse可以看做VA4J的Java语言实现,但并没有受到Smalltalk太多的影响和制约。为了更加实用,Eclipse去掉了一些纯OO的元素,在理想主义与实用性之间找到了一个很好的平衡点。虽然这使得一些纯OO的追随者伤心欲绝,但是结合实际应用、聆听用户的声音,或许这正是Java如此成功的根本原因吧。■
2.2、Eclipse的构架
如果把Java开发者比作铁匠,那么把Eclipse比作了铁匠铺就再合适不过了——你不但能够制作产品,还能够打造开发供具。
当你下载了Eclipse,你直接接触到的是:
用来编辑和调试Java源代码的Java开发工具箱(Java Development Toolkit,简称JDT),功能相当于IDE,用来开发产品。
可以扩展Eclipse本身的插件开发环境(Plug-in Development Environment,简称PDE),好比为Winamp等多媒体播放器的插件开发包,用来打造开发工具。
实际上,Eclipse的基础是Eclipse平台(Eclipse Platform),提供软件开发工具集成的服务,而各种开发供具,包括JDT和PDE,都是用插件的形式提供的。插件设计使得Eclipse具有开放式可扩充的结构。比如,如果你想开发C/C++程序,装一个C开发工具(C Development Toolkit,简称CDT)插件代替JDT即可。同理,通过开发相应插件,Eclipse也可以用来开发微软的C#程序。Eclipse设计的优美之处在于,除了小部分运行时核心,其它都是插件。
Eclipse的构架
通过插件机制,Eclipse体现了一种主观能动的态度:它提供你一个开放的平台、一个平等参与的机会,以及一些需要遵守的总体规则,然后你尽可快意恩仇,以出人意料但又令人拍案叫绝的方式来使用Eclipse。如果你有新的需要而Eclipse没有满足,自己动手做个插件吧,不但丰衣足食,对整个Eclipse社群也是直接的贡献。
主观能动并非开发工具的唯一态度。与Eclipse竞争的开发工具,比如Borland公司的JBuilder,采用的是另一种做法:你支付高昂的费用,Borland提供一个近乎全能的JBuilder——包括支持Eclipse不内建提供的JSP(服务器端动态网页技术)、EJB(一种企业级数据持久技术)和Web Services(Web服务)的开发。如若你要求新的功能,你可以告诉善于聆听用户意见的Borland,或许他们会在下一个版本中加上新特性满足你的要求。当然也可能完全不睬你,认为你的需求不足以令他们开发一个新特性。Borland公司的态度充满了商业的严谨,JBuilder也堪称经典,但是Eclipse的那种潇洒和自由,用户的那种强烈的归属感,溢于言表。
2.3、开放源代码
Eclipse是一个开放源代码的软件,是以Common Public License (简称CPL)授权形式发布的。开源通常意味着免费,Eclipse也不例外。
黄糖故事 公开源代码软件(Open-Source Software)
我们知道,身边很多软件是不包含源代码的,特别是最早将专利法的概念应用于软件产品之上的比尔·盖茨和他的微软公司,更是把Windows操作系统以及Office系统的源代码当做保护知识产权、构筑技术壁垒以及大发其财的镇宅之宝,即使微软的员工也只能管中窥豹,无缘庐山真面目。
公开源代码软件是源代码可以被公众使用的软件,并且此软件的使用、修改和分发也不受许可证的限制。与自由软件(Free Software)不同,开放源代码软件通常是有版权的,它的许可证可能包含:
保护源代码状态
保持作者的身份公告
对开发的控制
等限制。
虽然在源代码的版权上有所限制,但是公开源代码软件在透明度、可定制性、版权、价格(通常是免费的)、使用风险上,都要比传统商业软件好很多,当然在技术支持、开发进度方面有所欠缺。
开放源代码软件并非与商业软件格格不入。许多开源项目,比如BSD UNIX、Linux、Mozilla、Apache和现在的Eclipse,都展示了商业或者免费软件都可以得益于开放源代码的事实。原因很多,根本的一点就是,一个成功的开源项目为每个人创造价值。
更多的关于公开源代码的知识,请参考Open Software Initiative(简称OSI),他们的网站是:http://www.opensource.org。■
虽然Eclipse是一个开放源代码的项目,但是由IBM这样一个商业主体领导着项目的开发,这一点跟普通的趋于无政府主义的开源软件有所区别。实际上,CPL授权旨在促进Eclipse平台上的商业应用,呈现一个基于Eclipse的免费和商业软件共存的生态系统。
很多人抱怨IBM对Eclipse的影响力太大,认为Eclipse早晚会成为IBM自家的Hobby Ware(即不尊重开源的精神的个人癖好软件)。IBM的解释很简单——以Eclipse精致的开放式可扩充构架创造一个新的市场,插件制造商和用户可以各取所需,把蛋糕做大。笔者认为这种理念是有理有节的,只要坚持开放和交流的原则,并且有IBM这样对Java有着深刻感悟的强势领导,开源才能真正走向成功。
公开源代码的一个自然结果,就是Eclipse开发者一直在听取用户的意见——实际上,Eclipse的开发者本身就是Eclipse最忠实的使用者。而Eclipse的开发者中,不乏IBM的杰出科学家,所以Eclipse的品质以及理念极为出色。当初Eclipse 2.1发布的时候,曾经出现过“哄抢”的惨烈局面——下载量太大导致服务器带宽不够,要想在第一周内得到一份拷贝,也不是那么容易!
Eclipse新版本的不停推出,以及许多厂商通过为Eclipse开发插件而盈利,都说明了公开源代码的模式是成功的,也昭示了Eclipse的美好未来。
2.4、丰富的扩展资源
Eclipse是软件开发者的铁匠铺,炼炉、铁砧以及锤子,一应俱全。就像铁匠用已有的工具打造钳子等新工具,你还可以用Eclipse开发Eclipse的插件来扩展功能。得益于在Java社团中极高的知名度以及开源的本质,很多个人或者厂商提供了许多工具来扩展Eclipse,比如开发J2EE、UML建模等等的插件,很少有找不到相应功能的插件。此外,大多数工具都是免费的。
三、Eclpise的获取与安装
3.1、下载Eclipse
Eclipse的下载网页是http://www.eclipse.org/downloads/index.php。鉴于令人朝思暮想的Eclipse 3.0 Release将于2004年6月25日左右发布,我们这里将采用Eclipse 3.0 M9 Stable Build进行讲解。Windows版本的文件名是eclipse-SDK-3.0M9-win32.zip,约85.3MB。
黄糖故事 关于开源软件版本的行话
许多开源软件都有若干约定成俗的版本称谓,好比这个行当黑话,不了解会吃大亏。
Release——实现承诺的特性,并且通过彻底测试的稳定版本。这种版本一般非常健壮,并且拥有许多可以配合使用的第三方软件,适合开发商业项目。在这篇文章撰写之时,Eclipse的最新Release版本是2.1.3,于2004年3月10日发布。Release相当于Windows正式版。
Stable Build——新的Release版本一般要经过若干个开发周期,在此期间,如果某个版本经过测试相对稳定,开发人员便会把它发布成Stable Build,供渴望品尝新特性的用户在第一时间体验一下。这相当于beta测试版本的Windows。
Integration Build——当Eclipse开发人员开发出稳定部件时发布的版本,当然不能保证部件之间能够友善合作。如果可以,则将升级为Stable Build发布。不推荐普通用户下载使用。
Nightly Build——每夜构筑的版本,是自动工具的产物,方便开发者之间的交流。这种版本的稳定性没有任何保障,不推荐用户下载使用。
从上面可以看出,一般可以使用比较新的Release版本进行项目开发,或者Stable Build来尝鲜。■
3.2、安装Eclipse
安装Eclipse异常简单,把zip包中的eclipse目录解压缩到C盘根目录中即可。
3.3、启动Eclipse
你必须安装了J2SE 1.4以上的SDK或者JRE来运行Eclipse,安装方法请参考上一回连载。
一切就绪之后,双击“C:eclipseeclipse.exe”便能够启动Eclipse了。首次启动Eclipse,它会让你配置工作区,一般选择默认选项即可:
配置工作区
从3.0版本开始,Eclipse加入了非常人性化的Welcome首页,你可以自己把玩一下。
四、用Eclipse开发Hello World!
让我们通过Hello World!程序来体验地道的Java 开发。
4.1、新建Java项目
选择菜单File、New、Project...,选择Java Project,点击Next,便打开了New Java Project向导。在Project name中填入HelloWorld,由于不需要进行其它选项,直接按下Finish按钮,
4.2、新建HelloWorldApp类
依次选择菜单上的File->New->Class,在New Java Class向导中,Name框输入HelloWorldApp,并且在“public static void main(String args)”选项前面打上勾:
New Java Class向导
这时,向导会有一个提示,由于我们项目简单不需要用到package,所以不必理会。最后按下Finish按钮。这时你会发现,上回连载中的Hello World!程序的框架代码已经自动生成了。这就是Eclipse的代码生成(Code Generation)特性。
4.3、添加打印语句
与上回连载中的代码相比,现在仅仅缺少一句输出“Hello World!”字样的语句:
System.out.println("Hello World!");
让我们看看Eclipse中可以如何快速输入。
参照下图,首先把光标移动到“main”函数那行的“{”后面,回车,光标会自动跳到下一行并且多一个Tab位的缩进,自动保持代码的美观。现在输入“System”,注意“S”大写。然后输入“.”,这时你会发现自动弹出一个菜单,显示了“System”所有的成员变量和方法!接着输入“o”,弹出菜单会自动过滤以“o”打头的成员变量和方法,所以只剩下“out”了,你只要按下回车,“out”便自动加到“.”的后面。继续输入“.”,又会跳出菜单显示“out”的方法。由于“out”的众多方法中叫做“print”的很多,你可以直接输入“println”或者在下拉菜单中搜索,并按下回车。这时,你会发现“println”后面的括号都自动生成了。把光标移动到括号里面,输入引号,Eclipse会自动给你添加另外一半引号。在两个引号中间输入“Hello World!”。最后把光标移动到这行的最后,输入“;”号。
应用代码完成特性
虽然叙述起来很罗嗦,但是你自己操作一遍就能体会这样的编码有多舒服。这就是Eclipse的代码完成(Code Completion)功能。代码完成能够:
通过自动过滤加快输入的速度
通过选择与回车键选择的方式来避免输入错误
当你记不清某个类的成员变量或者方法时可以有效提示你
这里还有一个实用的技巧:当你的源代码中存在语法问题,Eclipse编辑器会用红色大叉外加波浪线来标记,你应该根据提示随时修正。
4.4、运行Java程序
现在我们直接在Eclipse这运行这个程序,看看执行结果结果。
按下“Run->Run...”,Eclipse会弹出运行设置向导,询问运行的配置。这个程序是一个Java程序,所以在Configurations里面选择“Java Application”,然后按下“New”按钮。当Eclipse创建好配置以后,你只需要按下Run便能够看到结果了。
直接在Eclipse中察看运行结果
五、小结
这一回中我们粗中带细地介绍了Eclipse的各方面知识。实际上,Eclipse博大精深,而且蕴含许多精辟的方法与概念,是许多IBM科学家多年积累的经验。限于篇幅,无法一一展开,真是遗憾得很。
由于Java咖啡馆主题还是Java语言,不能让Eclipse喧宾夺主,然而Eclipse中的许多哲学思想通用于软件开发,很多软件方法与技术令人爱不释手。希望你有时间能够多多把玩Eclipse,这个软件丝毫不亚于几千美金的商业软件!最后,推荐阅读Jim D’Anjou等人撰写的Using Java Development Tools in Eclipse 一文,该文章的URL是http://www.awprofessional.com/articles/article.asp?p=31789,文章对JDT的使用有细致的介绍。
欢迎大家继续到我的网志http://garychan.3322.org进行交流。网志是一个共同学习的好方法,通过交流,互相取长补短,分享创新的思维,共同进步。如果你对Java咖啡馆某篇文章有感触想写几句,或者对今后连载的题材有什么要求,首先请注册为网志用户,然后就能够登陆并且发言了。等待你的参与。