内容


迁移到 Eclipse

Eclipse 对 Netbeans 评估开发指南

何考虑 Eclipse 以及它与 Netbeans 有什么不同

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 迁移到 Eclipse

敬请期待该系列的后续内容。

此内容是该系列的一部分:迁移到 Eclipse

敬请期待该系列的后续内容。

通过比较来挑选 IDE

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

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

比较 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 编程更快、更容易一些。

关于透视图

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

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

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

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

图 1. Eclipse 的 Resource 透视图
Resource 透视图
Resource 透视图

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

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

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

在 Eclipse 中创建一个新项目

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

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

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

让我们开始编码

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

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

  • 在 Resource 透视图中,右击 Navigator 视图,并选择 New>Project
  • 选择 New Project 向导中的 Java Project。
  • 为项目输入一个名称,比如“Hello”。
  • 注意,在 Location 区域,您可以选择在外部位置创建项目,但接受默认选项“Create project in workspace”。
  • 此外,在 Project Layout 区域,接受默认选项“Use project folder as root for sources and class files”。通常,使用单独的目录(一般是 srcbin )更好一些,但现在,为了简便起见,我们将接受默认选项。
  • Next允许您为该项目所依赖的类路径配置库和添加其他项目,但我们不需要这样做,按 Finish就可以了。
  • 过一会,Eclipse 会问“This kind of project is associated with the Java Perspective. Do you want to switch to this perspective now?(这类项目与 Java Perspective 是相关联的。您现在想切换到这个透视图吗?)”。选中标记为“Remember my decision”的复选框,并单击 Yes

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

  • 右击 Hello 项目,并选择 New>Class。这将引出 New Class 向导。
  • 输入 com.example.hello 作为包名称。
  • 输入 HelloObject 作为类名称。
  • java.lang.Object 作为超类。
  • 确保选中了为 main() 方法创建存根的选项。
  • Finish。(参见图 2。)
图 2. HelloObject 类
HelloObject 类
HelloObject 类

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

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

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

图 3. Java 编辑器中的代码合并
Java 编辑器中的代码合并
Java 编辑器中的代码合并

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

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

图 4. 一个具有 QuickFix 的问题
一个具有 QuickFix 的问题
一个具有 QuickFix 的问题

当然,“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。现在,代码看起来应该是这样的:

    public static void main(String[] args) {
        Vector names = new Vector();
        names.add("Moe");
        names.add("Curly");
        names.add("Larry");
        }
    }

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

图 5. 在集合上进行迭代的 for 循环
在集合上进行迭代的 for 循环
在集合上进行迭代的 for 循环

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

        for (Iterator i = names.iterator(); i.hasNext();) {
                String name = (String) i.next();
                greet(name);
        }

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

    private static void greet(String name) {
          System.out.println("Hello, " + name);
    }

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

运行并调试程序

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

Hello, Moe
Hello, Curly
Hello, Larry

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

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

图 6. Debug 透视图
Debug 透视图
Debug 透视图

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

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

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

图 7. Java 的启动配置
启动配置对话框透视图
启动配置对话框透视图

重访 Resource 透视图

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

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

图 8. 切换到 Resource 透视图
Resource 透视图按钮
Resource 透视图按钮

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

  • 单击 HelloObject.class 以选中它。
  • 选择主菜单中的 File>Export
  • 选择 Zip 文件作为导出目的地,并按 Next
  • 在下面的屏幕中,要压缩的文件应该已经选中;然后,在标记为“To zip file:”的字段中浏览,或者为您想创建的压缩文件输入一条路径和文件名,最后,按 Finish

重构

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

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

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

  • 从选择 greet() 方法开始,可以通过在编辑器或 Outline 视图中右击其名称来完成。
  • 从上下文菜单中选择 Refactor>Change Method Signature...。(参见下图 9。)
  • 在标记为 Parameters 的表中,单击类型 String,并将它更改为 Object。
  • 将参数的名称更改为 Object。
  • 单击右边的 Add 按钮;这会在现有参数下添加一个新的条目。将其类型更改为 String ,将名称更改为 greeting ,并将默认值更改为 "Welcome,"
  • 我们想将 greeting 参数更改为第一个参数;验证它仍然是选中的参数并按 Up 按钮。(或者选择原始参数并按 Down 按钮。)
图 9. 更改方法的签名
更改签名方法
更改签名方法

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

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

图 10. Java 源代码比较:重构前后
Java 源代码比较:重构前后
Java 源代码比较:重构前后

以下是重构后的代码:

    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);
    }

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

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

        System.out.println(greeting + Object);

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 连接类型。

图 11. 创建到 CVS 存储库的连接
Add CVS repository 对话框
Add CVS repository 对话框

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

  • 切换到 Java 或 Resource 透视图。
  • 右击项目名称,并选择上下文菜单中的 Team>Share Project...
  • 出现一个对话框,其中选项 Use existing repository location selection 是选中的。在该选项之下,选中您以前进入的存储库。然后按 Next
  • 在接下来的对话框中,接受选项,以便将项目名称用做模块名称,然后按 Next
  • 下一个对话框允许您审阅您将登记的地方;如果没问题,就按 Finish
  • 最后一个对话框通知您,您还没有提交您的更改,并询问您是否想提交它们。按 Yes

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

  • Yes,如果您还没有这样做的话。
  • 您会获得提示,要求您输入注释“Initial version”。

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

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

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

  • 右击项目名称,并选择上下文菜单中的 Team>Synchronize with Repository
  • 您会获得通知,告诉您这项任务与 Team Synchronizing 透视图有关联,并询问您是否切换到该透视图。选中“Remember my decision”并按 Yes

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

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

图12. 将本地更改与存储库中的代码合并
Repository Synchronizing 透视图
Repository Synchronizing 透视图

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

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

  • 右击项目名称(或者一个文件名,以提交单个文件),并选择项目菜单中的 Team>Commit
  • 在提示的时候输入一条注释。(注意,如果您正检查该项目,并且有多个文件已经更改,那么该注释将被应用到所有文件。如果您想为个别文件输入注释,那么您需要单独检查这些文件。)

结束语

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


相关主题

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文
  • 获得 Eclipse 插件的完整清单
  • David Gallardo 撰写的“ Eclipse 平台入门”( developerWorks,2002 年 11 月)提供了 Eclipse 平台的历史和概述,其中包括关于如何安装 Eclipse 和插件的一些细节。
  • 要获得对 Visual Editor 及其背后技术的概述,对 Visual Editor 0.5 用来构建 AWT/Swing 应用程序的特性的简短示范,以及 Visual Editor 1.0 中 SWT 支持的预览,请参阅“ 利用 Eclipse Visual Editor 项目构建 GUI”( developerWorks,2004 年 5 月)。
  • 文章“ 任何人都可以重构”( developerWorks,2003 年 9 月),使用 Eclipse 2.1.x 中所有重构特性的示例,以及 Eclipse 3.0 中大多数重构特性的示例,展示了如何以及为什么使用 Eclipse 的自动重构特性。
  • 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 月)展示了如何使用 Easy Struts 插件在 Eclipse 中开发 Struts 应用程序。说明书中包括安装 Struts 和插件的说明。

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Open source
ArticleID=53658
ArticleTitle=迁移到 Eclipse: Eclipse 对 Netbeans 评估开发指南
publish-date=09072004