简介: Eclipse 是一个免费的、正日益流行起来的 Java 集成开发环境,最新版本的 Eclipse 中提供了很多特性,这些特性使它不但能与其他免费的 IDE 竞争,而且,即使是 IntelliJ IDEA 之类的专业商业软件,Eclipse 也能与之竞争。本文将 Eclipse 与 IDEA 进行了简单比较,为那些希望转换到 Eclipse 或者只是想体验一下 Eclipse 的程序员提供一份指南,让他们了解 Eclipse 提供了哪些令人激动的特性。
Eclipse 是一个雄心勃勃的项目。具体地说,它不仅仅是一个 Java IDE 工具,而且更是一种可扩充的开发平台,旨在能够支持任何一种编程语言。然而,其参考实现 —— Java Development Toolkit (JDT) —— 只是一个 Java IDE,大部分人(尤其是 Java 程序员)谈及 Eclipse 时,通常也是这样认为。尽管您还为 Java 开发和 JDT 担心,但 Eclipse 开放的、可扩充的特性足以促进 Eclipse 和 Eclipse 社区的大力发展。
Eclipse 3.0 和 IntelliJ IDEA 4 有很多重要的区别,而其中最显著的区别就是价格:要想使用 IDEA, 您必须付费才能获得许可证,而 Eclipse 却是免费的。这一点究竟有多重要取决于您(或您的公司)的预算,不过很多专业的开发人员发现,IDEA 具有他们需要的所有特性,而且价格也很有吸引力。尽管如此,虽然 Eclipse 不具备 IDEA 的所有特性,但是围绕 Eclipse 进行开发的社区非常活跃,他们已经以第三方插件的形式完善地提供了 Eclipse 所缺少的特性。
比价格和有多少特性更为重要的是如何使用 IDE 进行工作。IDE 对您有多大贡献取决于许多因素,除了所提供的特性之外,这些因素还包括整体设计、稳定性和性能。在本文中,我们主要考虑 Eclipse 3.0 JDT 的基本特性,并将这些特性与 IDEA 中的可用特性进行比较。
在编辑、运行和调试 Java 代码方面,IDEA 和 Eclipse 的基本特性基本相同,不过有时操作方式可能稍有不同。除了这些基本的编程特性之外,Eclipse 和 IDEA 都提供了对更高级的 Java 开发工具的支持,例如 Ant、CVS、JUnit 和重构。 (请参阅 参考资料中介绍 Eclipse 的重构(refactor)特性的一篇文章。) 通常,从另外一种 IDE 工具迁移到 Eclipse 上时,最困难的事情是学习如何在新环境中实现原来环境中的功能 —— 由于 Eclise 提供了如此丰富的特性,查找某个特性通常比较困难。幸运的是,在 Eclipse 的在线文档中,有非常完整而且易用的帮助系统。
直至最近,与 Eclipse 相比,IDEA 最主要的优点之一就是它有一个集成的 GUI 编辑器。但现在这种情况正在发生变化:Eclipse 引入了 Visual Editor。Eclipse 的 GUI 编辑器是一个单独的组件,但是,相对于 IDEA 的编辑器来说,它有一个非常重要的优点:其代码和图形视图之间可以进行非常流畅的转换(在一种模式下的变化几乎立即就可以反映到另外一种模式中),不需要其他元数据或文件。
Eclipse 的 Visual Editor (VE) release 0.5 支持 AWT/Swing,现在,也可以在 Eclipse 2.1.x. 中使用该版本。用于 Eclipse 3.0 的版本 VE 1.0 即将发布。VE 1.0 将被用作一个独立的软件,可以从 Eclipse 的网站上下载它,它不但支持 AWT/Swing,而且支持 SWT。有关 VE 的更多信息,请参阅后面 参考资料中列出的文章“Building GUIs with the Eclipse Visual Editor”。
IDEA 的另外一个优点是它集成了 Web 开发的支持。然而,即使您需要这种功能,也依然可以使用 Eclipse。有几个第三方的插件可以为 Eclipse 添加这种功能,比如 Lomboz 和 Sysdeo Tomcat 插件。请参阅 参考资料中的文章,它向您展示了如何下载、安装和使用这些插件以及其他第三方插件。
Eclipse 的新用户对 Eclipse 的普遍抱怨就是它难以使用。这在很大程度上是因为 Eclipse 采用了一种独特的方式来组织自己的用户界面。具体地说,Eclipse 引入了 透视图的概念,提供为执行特定任务而设计的环境,例如编码、调试、使用源代码控制系统等。经过一些引导和实践之后(这也正是本文的目的),大部分用户会发现,这个概念非常清晰,而且功能十分强大。
Eclipse 用户界面的另外一个优点是,它广泛采用了向导 —— 即一系列对话框,能够引导您一步步执行特定任务的步骤,比如新建项目或类,连接到 CVS 仓库等。当然,IDEA 也有向导,但是 Eclipse 的向导十分完整,提供了更多可能用到的选项。
从理论上来讲,Eclipse 在性能方面应该更具优势,因为它使用的是 SWT,SWT 使用了专用的构件 —— 操作系统的 UI 元素;而 IDEA 使用的是 Swing/AWT。然而,从实际情况来看,IntelliJ 在实现 IDEA 的用户界面方面做了很多杰出的工作,在一台功能强大的机器上,二者性能间的差距是可以忽略的。同样,Eclipse 和 IDEA 都非常稳定,用户基本上不会碰到什么问题。
最后,如果您想评估一下 Eclipse 是否适合您的开发,就需要将其安装到一个测试硬盘中,亲身体验一下。这是评价 Eclipse 易用性以及它是否适合您的工作风格的惟一方式。下一节将简要地介绍一下 Eclipse 的使用。如果您已经下载并安装了 Eclipse,那么请继续阅读本文。
在开始体验 Eclipse 之前,有必要先介绍一些用来描述 Eclipse 用户界面的术语。最高层是 Eclipse 应用程序窗口。按照 Eclipse 的术语来讲,这个窗口称为 工作台(workbench),它包含一个主菜单、一些工具按钮以及大量不同的窗格。与 IDEA 一样,每个窗格都有特定的用途,例如显示资源(包、源代码、编译脚本等),显示待做事宜,以及在运行程序时显示终端输出等。这些窗格被称为视图(view)。
除了视图之外,每个透视图通常都有一个 编辑器(editor)窗格。因为编辑器提供了创建并编辑资源(例如数据源、文本和映像文件)的主要方法,所以,在 Eclipse 工作台中,编辑器是最基本的窗格,随着在编辑器中选择的文件的变化,其他视图中的内容都会相应发生变化。例如,如果您正在编辑一个 Java 文件,那么大纲(Outline)视图就会显示您已选择的 Java 文件中的类的结构。
在执行不同的任务时,例如编码、调试或将修改后的代码与集中式代码存储库中的代码进行合并,可以专门为这项任务,对选定的视图进行排列。这种针对任务的特殊窗口排列就称为 透视图(perspective)。
当您第一次启动 Eclipse 时,会看到一个欢迎画面。这个画面中有一些到 Eclipse 的概述、指南和其他有用信息的链接。现在,单击主菜单下面的 Welcome 选项卡中的“X”,禁止再次显示该画面。(以后可以使用 Help 菜单返回这个欢迎画面)。现在,Eclipse 应该显示默认的资源透视图(Resource perspective),如图 1 所示。
图 1. 资源透视图
透视图有一项很有用的功能:它可以防止您的屏幕混乱不堪。例如,如果您没有正在调试程序,那么没有必要查看调试需要的工具按钮和菜单。这样可以更容易找到与当前任务有关的工具按钮和菜单选项。
如果您正从 IDEA 迁移到 Eclipse 上,那么您可能想打开一些 IDEA 模块(module)。要实现这项功能,需要为该模块创建一个 Eclipse 项目,并指定其目录 —— 注意,在 Eclipse 中,术语 project相当于 IDEA 的模块的概念。
假设您已经使用 IDEA 创建了一个项目 Zoo,它位于目录 C:/Documents and Settings/user/IdeaProjects/Zoo
中。再假设源代码文件位于子目录 src
中,类文件位于 classes
中。(如果您希望继续按照本文的介绍进行操作,可以使用 参考资料中的链接下载原始的 IDEA 项目。) 然后,按照以下方式启动 Eclipse:
- 选择主菜单中的 File > New > Project,然后打开 New Project 向导。
- 确保选中了 Java Project(请参见下面的图 2),然后单击 Next。
图 2. New Project 向导
- 在 Project name 中输入名字,例如
Zoo
。 - 单击 Location 下面的 Create project at external location。
- 找到(或输入)IDEA 项目的目录。请参见图 3。
图 3. 选择文件夹
- 单击 OK。注意,在选择 external location 之后,用来选择项目布局的那些选项都变灰了。这是因为 Eclipse 会自动对该项目进行分析,并确定其布局 —— 在这种情况中,可以将
src
作为源代码目录(Eclipse 更倾向于将其称为文件夹),将classes
作为类文件的文件夹。 - 在关闭 Browse Folder 对话框之后,会出现 Create a Java Project 对话框,现在,可以单击 Next或 Finish继续创建项目了。单击 Next 可以设置其他选项,例如将其他项目或库添加到 class path 中。假设 Zoo 是一个单独的项目,就不需要设置这些选项。只需要简单地:
- 单击 Finish。
- Eclipse 会提示您该项目与 Java 透视图是相关联的,并询问您是否希望切换到这个透视图上。单击 Remember my decision复选框(这样下次创建 Java 项目时就不会再询问您该问题了),然后单击 OK。
现在您会发现自己已经在 Java 透视图中了,而且 Package Explorer 视图中列出了 Zoo 项目。要浏览该项目,可以单击加号展开该项目,然后单击 src
文件夹定位您的源文件。
在源代码中放入一个错误很有用,这样就可以比较 IDEA 和 Eclipse 如何标记错误。例如,打开 Snake.java
,并取消对 speak()
方法的注释(与在 IDEA 中类似,您可以通过突出显示该方法的代码,然后按下 Ctrl-/. 键,取消对这段代码的注释)。这样会导致一个错误,Eclipse 会在这段代码的左边显示一个红色的“X”(表示此处有错),边上还会显示一个灯泡(表示 Eclipse 建议修正该错误)。
如果将鼠标放到这个灯泡上边,会出现一条消息,提示您 Snake
类没有实现在 Animal
超类中声明的抽象方法 speak()
。图 4 显示了这段代码在 IDEA 和 Eclipse 编辑器中的情况。正如您可以看到的一样,二者非常类似。
图 4. IDEA 和 Eclipse 编辑器的比较
Eclipse 在编辑代码方面提供了很多与 IDEA 相同的特性,包括几种自动代码补足功能。例如,如果您输入一个 Java 关键字、类名或方法名,然后按下 Ctrl-Space 键,Eclipse 就会提示一个可选项列表,您可以从中选择适当的项,将其插入代码。
Eclipse 还有一种称为 QuickFix 的特性,与 IDEA 的 Intention Actions 特性对应。正如您在上一个例子中已经看到的一样, 如果 Eclipse 对修正代码提出了建议,左边就会显示一个灯泡。您可以单击这个灯泡,或者选择包含错误的元素(这段代码以红色曲线形式的下划线标出,例如上例中的 Snake
),然后按下 Ctrl-1 来激活 QuickFix。在上面这种缺少该方法的情况下,Eclipse 会为您提供三个选项:Add unimplemented methods、Make type 'Snake' abstract 或 Rename in file。当然,现在我们想要的是添加未实现的方法(现在暂时忽略已经取消注释的代码)。
QuickFix 提供的最后一个选项是 Rename in file,该选项看起来似乎是错误的,这是因为这个提示实际上与修正缺少方法的问题毫无关联。 相反,这是 Eclipse 的一个很有趣的特性,它允许您一次修改一个文件中某个标识符的所有实例。要体验这项功能,请打开Animal.java
文件,单击变量 lion
,按下 Ctrl-1键,然后选择 Rename in file。您会注意到两次出现该变量名的地方都被一个矩形框封闭了起来;当您输入一个新名字时,例如 leona
,这两个地方都会发生改变。
当您在 Eclipse 中输入代码时,可能会注意到,有时光标前会出现一个绿色的条。例如,返回 Snake
类中新的 speak()
方法,输入System.out.println(
。Eclipse 会自动添加另外半边的圆括号(这与 IDEA 相同),在圆括号后面就会出现一个绿色的条。(请参见图 5。)这个绿色的条被称为插入点。
图 5. 按下 tab 键,将光标移动到插入点(就是那个绿条)处
然后在圆括号内输入左引号。同样, Eclipse 又会帮您添加右括号,后面又是一个绿色的条。(此时第一个绿色的条消失了。)输入一些“蛇语”,例如 "Sssss",然后按下 Tab 键。此时光标又移动到了引号之外的插入点处了。再按一次 Tab 键,移动到行尾,输入分号。
正如您可以看到的一样,这个例子并不能减少敲击键盘的次数,因为如果不想按 Tab 键,也可以用右箭头将光标移动到相同的地方;然而,一旦您习惯这种方式之后,就会发现这非常方便。在某些情况下,特别是在使用代码模板时,插入点尤其有用。例如,如果您使用一个带有 for
循环的模板,那么使用 Tab 和 Shift-Tab 键就可以在循环的不同部分(循环变量、测试表达式、增量表达式和循环体)之间来回移动。
Eclipse 有一个不十分明显的特性:它可以将编辑屏幕进行分屏。分屏的方法如下:在编辑器的顶部单击文件选项卡,然后将其拖动到编辑器面板的边缘。例如,假设现在打开了文件 Animal 和 Snake。
- 点击
Snake.java
选项卡,并将其拖动到面板底部。 - 这时会出现一个黑色箭头,指出您已经选择了一个有效的浮动位置。请参见下面的图 6。
- 释放鼠标按钮,将编辑器水平分隔为两个屏幕,下面的面板中显示了 Snake 文件。
- 要返回单文件视图,需要单击 Snake 选项卡,并将其拖回 Animal 选项卡边上的位置。
图 6. 将 Snake 选项卡拖动到底部,将编辑器面板分屏
Eclipse 采用的是增量编译器,因此通常不必显式地编译 Java 文件;在保存 Java 文件时,编译过的类文件也会自动保存。要运行一个程序,最简单的办法是在包浏览器(Package Explore)中包含 main()
方法的文件,然后选择 Eclipse 主菜单中的 Run > Run As > Java Application。(注意这个菜单与 Run > Run... 菜单项不同,后者我们很快就会看到。)如果您选择 Animal.java
并运行它,就会在编辑器下边的终端(Console)视图中产生输出,如图 7 中所示。
图 7. 在终端视图中 Java 程序的输出结果
在调试器中运行简单程序的方法与此类似。举例来说,首先在 main()
方法中双击调用 lion.speak()
的地方,设置一个断点。如果代码调试不是很重要,那么可以设置一个条件断点,条件断点是代码执行在某个特定表达式(例如 i==2
)为真时停止的断点,或者满足特定的次数后停止执行的断点,可以通过在断点处右击鼠标,选择上下文菜单中的 Breakpoint properties来设置这类断点。
要开始调试,需要选择主菜单中的 Run > Debug As > Java Application。由于 Eclipse 有一个比 Java 透视图更适合于调试的 Debug 透视图,因此 Eclipse 会询问您是否要切换到这个透视图。选中 Remember my decision复选框,然后按下 Yes。请参见下面的图 8。
图 8. 使用 Debug 透视图调试程序
Debug 透视图中的大部分视图或多或少都与 IDEA 窗口中的有些类似,不过它们的名称和排列可能稍有不同。例如,注意,Debug 视图(请不要与 Debug 透视图混淆)显示了调用栈的情况;这些信息实际上包括了您熟悉的 IDEA 框架和线程的内容。Variables 视图显示了当前程序变量的状态,Console 视图显示了程序的输出结果。
您还会注意到控制程序执行的工具按钮(Step over,Step into 等)都位于 Debug 视图的工具栏中。由于这些控制按钮以及调用栈都在一个工具栏中,因此如果您要调试多个程序(或者一个程序的多个实例),或者调试多线程的程序,那么只需要在调用栈中单击相应的按钮,就可以随意选择要调试的程序或线程。如果愿意,您可以再次启动样例程序,但并不结束它的第一个实例,来体验一下这些功能。
有时,您可能并不想(或不能)通过简单地选择 Run > Run As > Java Application菜单项来运行程序。如果需要向程序或运行程序的底层的虚拟机器传递参数,您可能需要使用 Run > Run...菜单选项。这样会引出一个对话框,您可以用这个对话框来设置以上选项以及其他一些选项。请参见图 9。
图 9. 启动 Java 程序并设置参数
IDEA 与 Eclipse 都提供了一种很好的特性,那就是都可以使用键盘快捷键来执行特定的命令。在 IDEA 和 Eclipse 中,有些快捷键是相同的,例如剪切和拷贝命令的快捷键,但是大部分快捷键都是不相同的。当您决定从头开始学习 Eclipse 的快捷键时,如果您已经习惯了 IDEA 的快捷键,那么您依然有机会,您可以定制 Eclipse 的快捷键(或 键盘绑定组合),以符合您原来的习惯。如果要对所有的快捷键进行定制,那么这将是非常繁琐而无趣的事(正如您将看到的一样,这样做最终是不切实际的),但是可以进行适当的折衷,设置并添加您经常使用的快捷键,在以后的时间里慢慢学习使用其他快捷键。
例如,如果您与许多偏爱使用 IDE 功能的程序员一样,那么您可能喜欢快速输入代码,而不管其风格,只是偶尔使用 IDE 的 format 命令美化代码。在 IDEA 中,您可以使用 Ctrl-Alt-L 快捷键实现这项功能,而在 Eclipse 中,使用的快捷键则是 Ctrl-Shift-F。如果您以这种方式格式化代码已经成为了一种自然习惯,那么就会发现修改快捷键将比自己重新学习使用新的快捷键更加容易。在 Eclipse 中,可以按照以下步骤将 Ctrl-Alt-L 设置为格式化代码的快捷键:
- 从主菜单中选择 Window > Preferences。
- 如果需要,展开 Workbench 选项,并单击 Keys。
- 在 Command 字段中,选择 Category 下面的 Source,并选择 Name 下面的 Format。
- 在 Key Sequence 字段中,单击 Name 框,然后按下要使用的快捷键 Ctrl-Alt-L。
- 在标有 "When" 的复选框中,选择 Editing Java Source。
- 单击 Add按钮(请参见图 10),然后单击 OK按钮。
图 10. 添加格式化源代码的快捷键
正如上面介绍的,我们不可能将 Eclipse 修改得完全像 IDEA 一样,因为 Eclipse 和 IDEA 的命令集并不相同。也就是说,尽管 Eclipse 和 IDEA 就有很多相似的特性,但是它们的实现通常都是不同的。具体来说,在一种环境中的一个命令可能对应另外一种环境中的两个或多个命令。例如, Eclipse 使用一个命令就可以实现查找和替换文本的工作,而 IDEA 则对这些功能中的每一项采用了不同的命令。
Eclipse 3.0 和 IntelliJ IDEA 4 都有非常丰富的特性,这两种 Java IDE 都提供了语法检查、代码提示以及为编码自动生成代码等方面的功能。另外,这两种工具都提供了对重构、Ant、单元测试和 CVS 的支持。很快,使用 AWT/Swing 或 SWT 来构建 GUI 的Eclipse Visual Editor 1.0 就会发布。但是这两种工具之间也存在一些重要的区别。
重要的区别之一是 Eclipse 用户界面的设计方式使用了透视图的概念,执行一项特定的任务可以使用一组视图、编辑器以及其他一些 UI 元素。这样可以简化任务的实现,因为手头随时都有适用的工具(而且只能使用这些适用的工具)。
另外一个重要的区别是 Eclipse 是一个开源项目。这种开源特性已经吸引了很多开发者社区为 Eclipse 开发插件,其中既有免费的插件,也有商业插件。如果您需要某种特性 —— 面向方面的开发支持,或者内嵌的 MP3 播放器,那么您很有可能会找到一款扩充 Eclipse 的免费插件,来支持这种特性。
- 获取 Eclipse 插件的详细列表。
- David Gallardo 撰写的“ Eclipse 平台入门”介绍了 Eclipse 平台的历史和概述,其中包括如何安装 Eclipse 及其插件的详细步骤 ( developerWorks, 2002 年 9 月)。
- 有关 Visual Editor 及其技术内幕的概述、Visual Editor 0.5 在构建 AWT/Swing 应用程序方面的特性的演示,以及在 Visual Editor 1.0 中对 SWT 支持的预览的信息,请参阅 “ 利用 Eclipse Visual Editor 项目构建 GUI” ( developerWorks,2004 年 5 月)。
- 文章“ 任何人都可以重构”( developerWorks,2003 年 9 月)介绍了如何使用 Eclipse 的自动重构特性及其原因,同时还给出了在 Eclipse 2.1.x 中使用所有重构特性以及在 Eclipse 3.0 中使用大部分重构特性的示例。
- Geoffrey R. Duck 撰写的 “ 使用 Eclipse 作为 Jakarta Tomcat 的开发环境”( developerWorks,2004 年 5 月),介绍了如何使用 Eclipse 和 Sysdeo Tomcat 插件开发 Tomcat 应用程序。说明书中包括安装 Tomcat 及其插件的说明。
- Paul Leszek 撰写的 “ 使用 Eclipse 平台进行调试”( developerWorks,2003 年 5 月),概括性介绍了如何在 Eclipse 中调试程序。
- Nancy Chen Junhua 撰写的 “ 使用 Easy Struts for Eclipse 开发 Struts”( developerWorks, 2004 年 4 月),介绍了如何在 Eclipse 中使用 Easy Struts 插件开发 Struts 程序。说明书中包括安装 Struts 及其插件的说明。
David Gallardo 是 Studio B的作者, 同时还是一名独立软件顾问和作家,他的专长是软件国际化、Java Web 应用程序和数据库开发。他作为专业软件工程师已经有 15 年多,对于多种操作系统、编程语言以及网络协议都具有丰富的经验。最近,他在一家 B2B 电子商务公司 TradeAccess, Inc. 中领导数据库和国际化的开发。在这之前,他是 Lotus Development Corporation 中国际化产品开发小组的高级工程师,致力于跨平台库的开发,这个跨平台库为 Lotus 产品(包括 Domino)提供了 Unicode 和国际化语言支持。David 还是 Eclipse In Action: A Guide for Java Developers(Manning, 2003) 一书的合著者之一。您可以通过 david@gallardo.org与他联系。