站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Eclipse 专题迁移到 Eclipse: Eclipse 对 Netbeans 评估开发指南

迁移到 Eclipse: Eclipse 对 Netbeans 评估开发指南

摘要: 到目前为止,大多数 Java 编程人员都听说过 Eclipse,它是可扩展的开放源代码开发平台,而且正迅速成为最流行的用于 Java 的 IDE。本文将 Eclipse 介绍给目前正使用 Netbeans 以及正考虑转向 Eclipse 的编程人员。本文简单比较了这两种 IDE 中的特性、它们的易于使用性和稳定性,重点展示了 Eclipse 的一些主要特性,以及这些特性与 Netbeans 中的有什么不同。
<table align="center" border="0" cellspacing="0" cellpadding="0" width="65%"><tr><td width="10"></td><td><table border="1" cellspacing="0" cellpadding="5" width="100%"><tr><td bgcolor="#eeeeee"> 对于 JBuilder 和 IntelliJ IDEA 程序员
如果您正在考虑移到 Eclipse,请阅读 developerWorks 上 David Gallardo 其他如何迁移文章:

Also visit the developerWorks Migration stationfor many other migration paths to open standards-based development.

</td></tr></table></td></tr></table>

通过比较来挑选 IDE

考虑到编程人员使用 IDE 所花费的时间,所以对于他们非常想知道哪一种 IDE 是最好的也就不觉得奇怪。一些人可能认为 Emacs 已经成为上个世纪的一件做工精巧的遗留物,但它仍有自己狂热的追随者,而且只有当他们冰冷僵硬的手指再也无法敲动键盘时,这些人才会放弃他们的追随。一种 IDE 比另一种要好,从某种程度来说是指它能提高您的生产效率,如果某人已经使用 Emacs 编码 C 有 20 多年的时间了,那么他在那个环境下可能会有很高的生产效率。

因为 Java 语言相对年轻,在任何特殊开发环境中进行编码的时间都不长(至少现在还不长!)。在提供新的特性、提高性能和变得更易于使用方面,Java IDE 时而走在前沿,时而落后,各种 Java IDE 的普及亦时盛时衰。最近,在开发方面最让人感兴趣的事情是引入了两款免费的、可扩展的开放源代码 IDE:Netbeans 和 Eclipse。它们正迅速向着提供商业功能方向靠拢。对于大多数开发人员,仅仅需要为他们提供这两种优秀的开发平台就可以了。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

比较 Netbeans 和 Eclipse

到目前为止,这两种 IDE 的最新版本分别是 Netbeans 3.6 和 Eclipse 3.0,它们在许多地方都大同小异。它们都有语法检验、代码完成和代码合并,都允许编译、运行和调试代码。并且都具有 Ant、CVS 和 JUnit 支持。此外,这两种 IDE 都有集成的 GUI 生成器,只是 Eclipse 的生成器是一个单独的组件 —— Visual Editor,需要单独下载。有关 Eclipse Visual Editor 的更多信息,请参阅 参考资料中列出的文章“Building GUIs with the Eclipse Visual Editor”。

这两种 IDE 之间的最大差别在于:Netbeans 有集成的 Web 开发支持,Eclipse 没有,但 Eclipse 有自动化重构,而 Netbeans 却没有。但是,即使某一特定特性对您很重要,缺乏这一特性也不一定会给您带来决定性影响。因为这两种 IDE 都是可扩展的,都可以使用插件,所以您会发现一些免费或者廉价的可用插件,来弥补这个差异。 请参阅 参考资料中向您展示如何获得、安装和使用插件在 Tomcat 上开发 Struts 和 Web 应用程序的文章。

许多开发人员更喜欢 Eclipse,因为它易于使用。这是由细节和整体设计方面的许多因素所造成的结果,这些因素结合在一起,就能立刻让您想起你所需要的工具。许多编程人员还发现,Eclipse 更快、更稳定。有些事情是难以量化的,但您又确实需要试着将它们量化出来,以确定 Eclipse 是否能让您的 Java 编程更快、更容易一些。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

关于透视图

在游泳的时候,最困难的事情常常是做出入水决定。您知道水很冷,也知道这种感觉很快就会过去,很快就会很舒服。与此类似,在最初开始使用 Eclipse 时,您可能发现用户界面有点让人畏惧,它只有有限的一组选项。您该如何开始呢?Eclipse 用户界面,或 工作台,是以 透视图的概念为基础的,在您有效使用 Eclipse 之前,必须先理解这个概念。

像许多大型计算机应用程序一样,Netbeans 也使用了许多不同的窗口让您执行不同的任务。开始的时候,屏幕左上方的 Filesystems 窗口允许您为您的项目添加和打开资源,右边的主窗口是用于编辑的。在需要时,可以打开更多的窗口,如输出窗口,这些窗口可以是自动打开的,也可以是您为了执行不同的任务而有选择地打开的。

Eclipse 建立在允许安排多个窗口的基本概念之上。因为允许执行不同的任务,比如编码、调试,或者将您的代码更改与集中式代码存储库中的那些代码进行合并,所以您可以使用专门为某项任务而选择的窗口排列。这些特定于任务的窗口排列就叫做 透视图。除了视图之外,每个透视图还可以在适当的地方有不同的工具按钮和菜单选项。

基本透视图是关闭初始 Welcome 屏幕时 Eclipse 启动的那个透视图,该透视图也叫 Resource 透视图。(请参见下图 1。)




与 Netbeans 相同,Resource 透视图在左上方有一个面向树的窗口,它允许您导航和管理资源,所以该窗口叫做 Navigator。与 Eclipse 中的大多数窗口一样,该窗口也称为视图。最初,Resource 透视图中还有其他两个视图 —— Navigator 下的 Outline 视图和主编辑器区域下的 Task 视图。

Eclipse 使视图和 编辑器之间有了重要差别。一个透视图可以有多个视图,但只能有一个编辑器,该编辑器也是工作台的焦点所在。一般而言,如果您在编辑器中打开一个文件,那么其他视图反映了该文件的不同方面。如果文件是一个 Java 文件,并且您是在 Java 透视图中,那么其中的一个视图 Package Explorer,展示了该文件在文件和包层次结构中所处的物理位置,另一个视图 Outline view,则展示了类的方法和属性(以及其他事物)。如果您有多个 Java 文件,那么这些视图将随着您在编辑器中的不同文件之间切换而改变。

尽管打开新的透视图和在透视图之间切换很容易,但通常不需要做这些,因为在您工作的时候,透视图会在适当的时候自动更改。(当然,Eclipse 会很有礼貌地先征得您的同意。)当我们创建一个 Java 项目时,以及后来调试 Java 程序的时候,您立刻就可以看到这一点。一旦开始使用透视图,您就会发现它们工作起来是多么流畅自然,因为没有了 UI 工具按钮、菜单和视图,所以它们不适合完成手边的作业。但这使它们更易于发现相关的工具。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

在 Eclipse 中创建一个新项目

在开始使用 Eclipse 时,必须先创建一个项目。Eclipse 和 Netbeans 都使用“项目”一词来描述它们组织文件和其他资源的一种主要方式,但它们所指的是完全不同的两回事。

要了解 Eclipse 为什么使用“项目”一词,首先一定要了解,Eclipse 与一个叫做 workspace 的目录是相关联的。当您第一次启动 Eclipse 的时候,您会获得提示,告知该目录的位置(假定您没有将它指定为命令行选项),如果不存在该目录,Eclipse 会为您创建它。默认情况下,您的所有信息(一些特定于 Eclipse 的信息、您的 Java 源文件、类文件、映像等)都存储在该目录的子目录(或者叫做 文件夹)中。该目录中的每个文件夹都对应于一个 项目,而且通常还包含一个单独的应用程序、一个 Web 应用程序或者一个某种类型的组件。

尽管因为工作台使事物更易于组织而推荐使用工作台,但 Eclipse 3.0 引入了一项功能,能够在工作台之外创建或指定现有目录作为项目文件夹。如果您正从另一个不鼓励严格组织目录结构的 IDE 进行迁移,那么这可能特别有帮助。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

让我们开始编码

如果您想顺着进行下去,那么不必再启动 Eclipse,现在就可以开始编码。(如果您还没有安装 Eclipse,那么可以参考 参考资料中列出的文章“ Getting Started with the Eclipse Platform”。)第一次运行 Eclipse 时,您将见到一个 Welcome 屏幕。该屏幕通向教程和其他有趣的项,但现在可以通过按顶端标签中的“X”来关闭它;稍后,您可以通过从主菜单中选择 Help>Welcome,再次调用该屏幕。

如前面的图 1 所示,您将进入 Resource 透视图。在 Eclipse 中,总是有一种以上的方法来完成一些操作,比如使用快捷键、工具栏或者菜单选项,但在这一篇文章中,我们一般采用的是菜单。下面我们将使用上下文菜单创建一个项目,如下所示:

现在有了一个项目,接下来我们可以创建一个类。我们将创建标准 Hello, world 程序的一个变体。




创建这个类之后,您会注意到很多不同的东西。首先,少量 To Do 项出现在文件中,这与我们必须定制生成注释的模板这一事实有关。与其他注释(如书签、断点和语法问题)类似,这些注释也是通过编辑器左侧空白上的符号来指示的。随后,我们应该根据目录,为该注释修改代码模板,但眼下我们原封不动地将它留在了那儿。

还要注意的是,与左栏中的每个符号相对应的是右栏中同一颜色的一个小方框。尽管左侧空白上只标记了目前可以在编辑器中看见的事物,但右侧空白显示了在文件中做了标记的所有事物。如果您有一个在结尾处有错误的长文件,那么不管文件的哪个部分显示在编辑器中,右侧空白的底部都将有一个小的红色方框,单击该方框会将您带到出错之处。

除了最左侧的复选符号之外,在右边的某一列中还有一些小三角。这些小三角对应于控制代码合并的加减符号。单击类定义前面的注释旁边的第一个三角可以删除注释,而用省略号替换它。(参见图 3。)




注意:正如您在 Eclipse 中处理代码那样,您会注意到,左侧空白中还有另一个列,位于注释和代码合并控件之间。该列包含一些有颜色的条,能让您将编辑器中的当前代码与以前版本的代码进行比较。这个特性就叫做 QuickDiff,您可能希望以后自己可以利用这个特性。

现在,我们将添加一些代码,因此,我们要处理一些事物。向 main() 方法添加行,以创建一个称为 names 的 Vector。因为没有导入 Vector 类型,所以左侧空白上将有一个符号,是一个包含“X”和黄色电灯泡的红色方框。(参见图 4。)




当然,“X”意味着存在一个问题,但黄色电灯泡意味着 Eclipse 可以获得一个 QuickFix:即一条或多条解决该问题的建议。单击电灯泡,或者单击 Vector 并按 Ctrl-1(QuickFix 的快捷键)。出现一个弹出式菜单,列出了可能的修改,其中包括:“Import Vector”、“Rename in File”和“Create Class Vector”。您可以双击第一条建议,让 Eclipse 为您添加一条导入语句。

关于 Eclipse 的有趣事情是,在键入代码之后,它使用增量编译器来编译代码。如果有语法错误,那么它就无法正确解释您的代码,从而无法为您提供 QuickFix。例如,如果您修复上述导入问题,并且在下一行中键入名称继续后面的操作,那么这些名称下方会被划上红色的曲线,指出存在语法错误,但不会再给出任何指示,以指出前一行定义映射的地方存在问题。

将鼠标指针放在出现语法错误(比如这里的语法错误)的地方,一会将出现一个描述问题的快捷提示;在本例中,它指出语句不完整,还需要一个分号。(当然,这不是所有遗漏,这只是个开始。)您可能认为这是一条特性:它鼓励您在继续前进之前修改您的错误。当然,也不是非要这样做不可,但是,如果您不这样做,您将无法尽可能有效地使用 Eclipse。

在确信正确导入 Vector 之后,再通过键入名称开始下一行。您可以使用代码完成(code completion)来定位适当的方法,用于向 Vector 名称添加一些项。Eclipse 中的代码完成与 Netbeans 中的作用相同:在键入类型或标识符的第一部分之后,按 Ctrl-Space,会出现一个选项列表。如果忘记了您需要的方法的名称,不知道它是 put() ,还是 add() ,那么这项功能特别有用。

当然,您想要的是 add() ,在从列表中选择了单参数版本之后,您将注意到,Eclipse 不但能使方法名称完整,而且还能添加左括号和右括号,将普通光标放入括号中,并在右括号后面划一条绿色的线(类似一个光标)。当您在 Eclipse 中输入代码时,您将看到这条绿色的线,虽然您只能忽略它,它没有什么明显效果,但现在花费一分钟时间来解释它可能是值得的。如果您稍后编写自己的代码完成模板(是在 Eclipse 中很容易完成的事情),您可能想利用该特性。

这条绿色线是一个插入点,您可以通过按 Tab 键将光标移动到这个位置。在这里提供它是因为在您为 add() 添加了一条语句之后,估计您可能想移动到括号后面的位置上,再添加代码或者一个分号,有了这条绿色线就会很方便。

将硬编码字符串“Moe”添加到 names Vector。在键入左引号时,Eclipse 会自动提供右引号,将光标移动到两个引号之间,并在右引号后提供一个新的插入点。在键入 Moe 之后,按 Tab 移动到右引号之后。右括号后的第一个插入点现在就显现了出来。再次按 Tab 移动到语句末端,并键入一个分号。

与此类似,再将两个名称添加到 names 向量,这两个名称是 Curly 和 Larry。现在,代码看起来应该是这样的:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

    public static void main(String[] args) {
        Vector names = new Vector();
        names.add("Moe");
        names.add("Curly");
        names.add("Larry");
        }
    }
</td></tr></table>

关于 Eclipse 中代码完成的一个优点是:它们可以感知自己的上下文。在这里,如果您键入 for 并按 Ctrl-Space,那么您会有几个选项,其中之一就是在集合上迭代。选择该选项并插入代码,如图 5 中所示。




注意,Eclipse 已经添加的每个标识符的第一个实例都被封闭在方框中。如果您更改这些实例,那么 Eclipse 要在每个地方更改它们,否则它们还会出现。如果您将 iter 重新命名为 i ,那么其他实例也会自动更改该名称。在这里,惟一必须更改的是 String 的类型,但是,您可能还想将 element 更改为 name。那么您可以按 Tab 和 Shift-Tab 在它们之间移动。在做了这些更改,并添加了对目前为止不存在的方法 greet() 的调用之后,代码看起来将是这样的:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

        for (Iterator i = names.iterator(); i.hasNext();) {
                String name = (String) i.next();
                greet(name);
        }
</td></tr></table>

接下来,使用 Eclipse 的 QuickFix(比如,通过单击 greet 并按 Ctrl-1)为 greet() 生成一个方法存根,并将代码添加到该存根,如下所示:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

    private static void greet(String name) {
          System.out.println("Hello, " + name);
    }
</td></tr></table>

这时,代码应该还没有任何错误。右击编辑器并选择上下文菜单中的 Save


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

运行并调试程序

正如我们所提到的,Eclipse 使用了一个增量编译器,因此,没必要显式编译您的 Java 文件。编译过后的类文件是在保存 Java 文件时保存的。要执行您的程序,需要在编辑器或 Package Explorer 中选择 Java 文件,然后选择主 Eclipse 菜单中的 Run>Run As>Java Application。(注意,这不同于 Run>Run...菜单选项,我们稍后将看到这个菜单。)这应该在 Editor 下的 Console 视图中产生如下输出:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

Hello, Moe
Hello, Curly
Hello, Larry
</td></tr></table>

在调试器中运行一个简单的程序也与此类似。首先,通过双击(而不是像 Netbeans 那样单击)左侧空白,在调用 main() 方法中的 greet() 的地方附近设置一个断点。如果您想设置一个条件断点,比如在某一特殊表达式(比如 i==2 )为真时停止的断点,或者在达到某一特定命中数时停止的断点,那么您可以右击该断点,从上下文菜单中选择 Breakpoint properties。

要开始调试,需要从主菜单中选择 Run>Debug As>Java Application。因为 Eclipse 有一个比 Java 透视图更适合用来进行调试的 Debug 透视图,所以会询问您是否想更换成这个透视图。选中复选框“Remember my decision”,然后按 Yes。参见下图 6。




您或多或少应该熟悉 Debug 透视图中的一些视图,大多数视图与 Netbeans 窗口中的视图类似,尽管它们可能有不同的名称。Debug 视图(不要与 Debug 透视图混淆)展示了调用栈(call stack),Variables 视图展示了程序变量的当前状态,而 Console 视图则展示了程序。

您还会注意到,在 Debug 视图的工具栏中有用来控制执行的工具按钮(Step over、Step into 等)。这些控件与调用栈一起放在这的原因是:如果您正在调试一个以上的程序(或程序的实例),或者正在调试包含多个线程的程序,那么您可以通过在调用栈中单击它们来选择要控制的程序或线程。如果您愿意,可以通过再次启动该示例程序来处理这些操作,无需终止第一个实例。

有时候,您可能不想(或者无法)使用简单的菜单选项 Run>Run As>Java Application来运行程序。如果您需要将参数传递到程序或者运行该程序的 VM,那么您需要使用 Run>Run...菜单选项。这将弹出一个对话框,您可以使用它来设置这些选项和其他选项。参见图 7。





<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

重访 Resource 透视图

透视图的一个优点是能让您的屏幕不再混乱。例如,您可能已经注意到,在 Java 透视图中,类文件没有出现在 Package Explorer 中。假定 Eclipse 能够编译您的 Java 文件(如果它无法编辑,它会让您知道),那么您真的不需要对它们做任何事情,以便编译、运行和调试程序。但是,一旦您做了,那么您可能想将类文件复制到另一个目录,或者压缩它,以通过电子邮件将它发送给其他人。

完成这项操作的方法之一就是走出 Eclipse,因为您知道您的工作区目录在哪儿,该目录和保存项目文件的 Hello 子目录没什么特殊的。但是,您还可以通过选择主菜单中的 File>Export,在 Eclipse 内部完成这项操作。首先,您需要返回 Resource 透视图,以便查看所有文件。您可以非常容易地执行这项操作,单击工作台右上角的 Resource 透视图按钮即可。




在这里,您将看到隐藏在 Java 透视图中的几个文件:您的类文件、 HelloObject.obj 文件,以及 Eclipse 用来存储项目信息的两个元数据文件( .project.classfile )。要压缩您的类文件,请执行以下操作:


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

重构

Netbeans 具有一些类似于重构的代码生成特性:例如,为类属性生成 getters 和 setters 的功能。不过,这些特性与重构不同,因为它们添加了新功能。重构不同于自动代码生成,它重新构造了代码,却没有改变其功能性。

如果您有一组全面综合的 JUnit 测试,并且您的代码通过了测试,那么在重构之后,您的代码应该能够继续通过相同的测试。(在某些情况下,重构可能改变单元测试本身,但重要的是这也应该是自动发生的。)有关重构的更多信息,以及在 Eclipse 中可以使用的重构的许多方面的介绍,请参阅 参考资料中列出的文章“Refactoring for everyone”。

下面我们将快速浏览一个相对简单的重构:Change Method Signature。我们将借此把示例程序的 greet() 方法中的 String 参数的类型更改为 Object,同时为它打印的问候语添加一个 String 类型的附加参数。要做到这一点,请执行以下操作:




对于所有重构,现在都有两个选项。第一个选项是“Just Do It”选项。通常,Eclipse 都可以获得自己的重构权,在极少数情况下,它无法获得该权利,您可以使用 Refactor>Undo菜单选项取消该操作。(尽管该菜单选项只在重构之后的有限时间内有益,但是如果没有该菜单选项,而您更改了所涉及的任何文件的话,您将无法再取消重构。)如果您对这个选项感到满意,那么只需按 OK即可。通常,这是最容易做的事情了,但现在不要做它。

第二个选项是“I want to micromanage”,该选项非常有趣,至少应该看一下。通过按 Preview,Eclipse 向您展示了一个对话框,该对话框允许您在比较该选项下的选定文件之前和之后,选择位于顶部的、并排呈现的所有受影响文件中的特定更改。(当然,在本例中,只有一个文件。)在这里,您可以逐个文件、逐个更改地检查提议的重构,单独赞成或反对每个更改(参见图 10)。选中所有更改,并按 OK




以下是重构后的代码:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

    public static void main(String[] args) {
        int x = 100;

        Vector names = new Vector();
        names.add("Moe");
        names.add("Curly");
        names.add("Larry");
        for (Iterator i = names.iterator(); i.hasNext();) {
            String name = (String) i.next();
            greet("Welcome, ", name);
        }
    }

    /**
     * @param greeting TODO
     * @param object
     */
    private static void greet(String greeting, Object object) {
            System.out.println("Hello, " + object);
    }
</td></tr></table>

注意,除了更改方法自身之外,重构还更新了 main() 方法中的 greet() 方法调用,并使用默认值 Welcome 作为第一个参数。如果项目中还有其他文件,并且它们也调用了 greet() ,那么它们将以同样的方式被更改。

如果您现在运行程序,那么将产生与以前完全相同的结果,像任何适当的重构应该的那样。我们获得了在每次调用 greet() 方法时,能够打印输出和使用不同问候语的能力,但是,这只是一种我们必须通过更改 System.out.println() 调用而作出的函数性代码更改,如下所示:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

        System.out.println(greeting + Object);
</td></tr></table>

<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

CVS

尽管 Netbeans 和 Eclipse 都支持 CVS 和其他版本的控制系统,但 Eclipse 使用两个单独透视图提供一个制作更精细的界面。第一个透视图是 CVS Repository Exploring,可以用它来选择要连接到的 CVS 存储库和模块。尽管这可能使 CVS 最初的使用有点困难,但是该方法鼓励使用符合要求的、结构化的工作流。此外,Eclipse 支持的客户机-服务器连接要比 Netbeans 多。具体地说,Netbeans 只在内部支持 pserver 协议,因为使用明文传输口令,所以该协议实质上是不安全的。Eclipse 既支持 pserver,也支持 ssh,我们将在下一节中看到这一点。

要开始使用 CVS,您需要访问 CVS 存储库以及连接到 CVS 所必需的信息。通过选择 Eclipse 主菜单中的 Window>Open Perspective>Other,并选择 CVS Repository Exploring,可以打开 CVS Repository Exploring 透视图。该透视图有几个有趣的视图,但最重要的视图在左上角上,该视图就是 CVS Repositories。右击这里并选择 New>Repository Location,您就可以进入连接到 CVS 服务器所需的信息(参见图 11)。注意,要使用 ssh,则需要选择 Eclipse 的 extssh 连接类型。




您可以在 Eclipse 项目中创建一个新的 CVS,如下所示:

现在,您会被告知有 6 个资源没有在版本控制之下。如果您愿意,可以都简单回答 Yes,但是如果您好奇想知道这些资源是什么,那么可以先按 Details。您会发现这些资源是两个 Eclipse 元数据文件( .project.classpath )、Java 源文件 HelloObject.java ,以及存储 Java 源文件的嵌套文件夹(对应于源文件的包): /Hello/com/Hello/com/exampleHello/com/example/hello

当您检查了 CVS 里里外外的文件,并对这些文件做了更多的工作之后,您需要在检查文件之前,确信自己的更改不会与其他人的更改发生冲突。事实上,如果存在冲突更改,CVS 不会允许您检查它们。

您可以使用存储库以两种方式来分解和合并代码。最简单也最危险的一种方法是,通过右击您的项目并选择上下文菜单中的 Team>Update,使用来自 CVS 存储库中的更改只更新您的本地文件。如果有一些更改,那么将使用 diff 格式把它们自动合并到您的文件中(许多大于符号和小于符号标明了哪些行在您的代码中,但不在存储库中,反之亦然)。试图弄清楚这一点很单调乏味,而且容易出错。

最好使用 Eclipse 的 Team Synchronizing 透视图,它向您并排展示了更改过后的文件,并允许您审阅这些更改,在任意一个文件中接受或拒绝它们。要做到这一点,请执行以下操作:

与其他大多数透视图相同,您首先想查看的视图是工作台右上角的那个视图,在本例中,它是 Synchronize 视图。在顶部有几个工具按钮,其中包括 Incoming Mode、Outgoing Mode、Incoming/Outgoing Mode 和 Conflicts Mode。最初选择哪种模式取决于存储库中是否有一些更改、本地代码中是否有一些更改,或者二者中都存在一些更改(不管这二者中的更改是否冲突)。该模式决定了哪些文件显示在视图中:是更改过后的本地文件,还是更改过后的存储库文件,亦或是二者都显示。这听起来可能让人感到迷惑,但实际上,您不用为这些细节担心;重要的是这项操作可以过滤掉不必要的信息。您将只看见您需要审阅的文件,以便随存储库更新您的源代码。

假设您向 HelloObject 添加了一些代码(这样它可能就可以处理不同于其他对象的 String ),与此同时,其他人也在检验该代码并进行另一项更改(可能是对 main() 方法进行更改)。您可能没必要知道这一点,但在您登记您的文件时,可以右击该文件,然后选择 Team>Synchronize with Repository...。这将打开 Repository Synchronizing 透视图(当然,是在您的允许之下),并且将并排地对比本地文件与 Repository 中的文件(参见图 12)。




在这里,您可以审阅每个文件中的每个更改,通过按 Java Source Compare 视图中的 Copy Right to Left 按钮,或者通过手动地在适当的地方编辑本地文件,您可以将这些更改复制到您的源代码中。当您对合并感到满意的时候,可以通过右击 Synchronize 视图中的文件名称,并从上下文菜单中选择 Mark as Merged ,在合并之后标记该文件。

一旦已经解决了所有冲突并在 Synchronize 视图中合并了所有文件,那么您应该返回 Java 视图,并在检查代码之间,验证项目的构建和运行是否正确,如下所示:


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

结束语

就特性与特性而言,Eclipse 与 Netbeans 非常匹配。事实上,因为它们都是可扩展的,所以通常可以使用第三方插件来弥补二者之间的所有特性差异。它们之间的最大的不同在于它们设计用户界面的方式。Eclipse 是围绕着透视图的概念来组织的,透视图可以使完成作业更容易,因为合适的工具(并且只有合适的工具)就在手边。Eclipse 中还有其他许多特性,它们使 Eclipse 成为 Java 编程人员的更有效的工具,这些特性包括 QuickFix、QuickDiff,以及使用书签和类大纲在源代码内部轻松导航等。您还会发现,Eclipse 3.0 非常支持 CVS 和重构,这些在 Netbeans 中找不到。这会促进任何编程人员,包括 Netbeans 目前的一些狂热爱好者,去尝试并掌握 Eclipse。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

关于作者<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3"></td></tr><tr align="left" valign="top"><td>

</td><td></td><td width="100%">

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与他联系。

</td></tr></table>

<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


↑返回目录
前一篇: 迁移到 Eclipse: Eclipse 对 JBuilder 评估开发指南
后一篇: SWT 和 JFace,第 3 部分: 简介