开始之前
本教程适用于希望学习如何使用 Eclipse Rich Client Platform (RCP) 的开发人员。Eclipse 已发展成为拥有广泛应用程序的平台,服务于广大不同的最终用户。把 RCP 看成集成平台,它与 Eclipse 拥有一样的原始功能,但是总体内存占用更小,用户界面更加灵活。RCP 使得用 Java™ 编程语言编写桌面应用程序成为可能。
关于本教程
本教程使用 Eclipse RCP 构建一个应用程序。示例应用程序被分成四个部分,每一个部分都是构建在前一个之上。开始,在 Eclipse 提供的 RCP 模板帮助下创建一个基本的 RCP 应用程序。然后,将一些动作、首选项页面、视图和帮助添加到基本的 RCP 应用程序。接着是加商标和将基本的 RCP 应用程序转变为产品。最后是在 Eclipse 以外打包并部署 RCP 产品。
前提条件
本教程假设您了解基本的编程知识。了解 Java 编程语言和 Eclipse 更好,但不是必需的。
系统需求
需要用到下列工具:
Eclipse Eclipse 是 RCP 驻留的平台。从 Eclipse.org 下载 Eclipse V3.1.x。Java 技术 Eclipse 和它的所有插件都需要 Java 技术。从 Sun Microsystems 或 IBM 下载 Java 技术。
请确保阅读安装部分,获得有用的逐步指导。
什么是 Rich Client Platform?
最初,Eclipse 平台设计用作开放工具平台。然而,从 Eclipse V3.0 开始,它被重新架构,使其组件可被用来构建几乎任何客户机应用程序。构建一个富客户机应用程序所需用到的最小插件集统称为 Rich Client Platform (RCP)。这些富应用程序仍然基于动态插件模型,并且图形用户界面是使用相同的工具箱和扩展点构建的。然而,最关键的差异在于,RCP 应用程序的工作台处于插件开发人员的精细控制之下。注意,Eclipse IDE 本身就是一个 RCP 应用程序。
RCP 要求
要构建具有图形用户界面的 RCP 应用程序,需要下列插件及其前提条件:org.eclipse.ui 和 org.eclipse.core.runtime。到 Eclipse V3.1.1,RCP 的总体磁盘需求量大约是 6.6 MB,其中包括上面的插件、startup.jar 和 eclipse.exe 可执行文件。现在,RCP 应用程序可自由使用任何必要的 API,并可以在最低要求之上要求任何插件,如 Help UI 和 Update Manager。
由 org.eclipse.core.resources 插件提供的工作区资源模型被认为不是 RCP 的一部分。它虽然是用于 Eclipse IDE 的底层数据模型,但 RCP 对使用底层数据模型构建的应用程序不作保证。数据模型可以是本地文件系统、远程数据库或其他地方的文件。如果对应用程序有意义,org.eclipse.core.resources 可以被包含并用作应用程序的数据模型,但这不是必需的。
org.eclipse.ui.ide 插件位于通用工作台 (org.eclipse.ui) 的上层,并为 Eclipse IDE 定义应用程序,在 Eclipse IDE 之上还有其他 IDE 组件,如 Java Development Tools (JDT)、Plug-in Development Environment (PDE)、Debugger 和 Team 支持。IDE 实例化通用工作台,给它配置 IDE 特定的菜单和工具条条目,并添加 IDE 特定的视图、首选项页面和其他扩展。IDE 使用工作区资源模型作为其底层数据模型。在 IDE 内部定义的 org.eclipse.ui.ide 插件和扩展没有设计成在其他 RCP 应用程序中被重新使用。
Eclipse 运行库定义其他插件所依赖的插件(org.eclipse.osgi 和 org.eclipse.core.runtime)。Open Services Gateway Initiative (OSGi) 框架将插件称为包(bundle)。包与 OSGi 一起指定和执行 Java 类加载、前提条件管理和包的生命周期等过程。Eclipse 核心运行库负责发现和运行主 Eclipse 应用程序,并维护插件及其扩展和扩展点的注册。另外,运行库还提供了一类工具,如日志记录、调试跟踪选项、首选项存储和并发基础设施。
基础
步骤 1:创建最小的 Hello World RCP 应用程序
单击 Ctrl+N 打开 New 向导。
选择 Plug-in Project 然后单击 Next。
在 Project name 文本域输入 com.ibm.plte,然后单击 Next。
对于 “Would you like to create a rich client application?” 选择 Yes,然后单击 Next。
选择 Hello RCP 模板,然后单击 Finish。
Open Associated Perspective 对话框将会弹出。单击 Yes。
您的工作台应该与下图类似:
图 1. PDE 透视图中插件 com.ibm.plte 的 plugin.xml
Hello RCP 模板非常强大并在幕后执行很多任务。模板生成一个插件项目,并添加两个扩展点和六个 Java 类。每个扩展点和 Java 类描述如下。
表 2. Hello RCP 模板生成的工件的描述
org.eclipse.core.runtime.applications | 该扩展点将主程序和实现 IPlatformRunnable 和 run() 方法的类的名称告诉 Eclipse 运行库。在 Hello World RCP 应用程序里,程序名是 com.ibm.plte.application,类名是 com.ibm.plte.Application。 注意,既然 Eclipse IDE 是一个 RCP 应用程序,那么它也定义了该扩展点。在 Eclipse IDE 中,应用程序名是 org.eclipse.ui.ide.workbench,类名是 org.eclipse.ui.internal.ide.IDEApplication。 |
org.eclipse.ui.perspectives Perspective.java | 透视图 是一系列包含位置和大小的可见视图、编辑器和菜单。在 RCP 应用程序中,您必须定义至少一个透视图并将它设置为默认的。透视图是通过使用该扩展点引用的类名实现 IPerspectiveFactory 而创建的。该接口最重要的部分是 createInitialLayout() 方法,您在这里定位和打开您希望用户开始时看到的任何视图或编辑器。本例到目前这里还没有视图或编辑器,因此方法是空的。 |
PltePlugin.java | 该类被称为插件类。一个可选的单个类可以用来存储插件的全局信息。它也是放置插件中其他类使用的静态实用功能的一个方便的地方。 |
Application.java | Application.java 类是 RCP 应用程序的主例程。与 Java 类 main() 类似,是应用程序的控制器。该类负责创建一个工作台并将 ApplicationWorkbenchAdvisor.java 与其连接。 工作台作为 RCP 框架的一部分声明和维护。只有惟一一个工作台,但是可以有不只一个可见的顶层工作台窗口。例如,在 Eclipse IDE 中,当您第一次启动 Eclipse 时,您将会看到一个工作台窗口,但是如果您选择 Window > New Window,则会弹出第二个窗口。因此,现在有了两个工作台窗口,但是只有一个工作台。 |
ApplicationWorkbenchWindow.java ApplicationWorkbenchAdvisor.java ApplicationActionBarAdvisor.java | 有三个 advisor 类用来配置工作台的所有方面,如标题、菜单条等。这些是 RCP 开发人员要理解的最重要的类。您可以在 RCP 应用程序中扩展基类(例如 WorkbenchAdvisor),并覆盖一个或多个方法来设置您需要的选项。详细信息参见产品文档。 |
步骤 2:运行最小的 Hello World RCP 应用程序
确保 com.ibm.plte (plugin.xml) 编辑器的 overview 页面是打开的。单击 Testing 部分的 Launch an Eclipse application。最小的 Hello World RCP 应用程序应该与下面所显示的相似。
图 2. 最小的 RCP 应用程序
用这两个简单的步骤,您创建和运行了一个最小的 RCP 应用程序。这时,RCP 应用程序包含一个透视图,而没有其他 Eclipse 功能(菜单、动作、视图、首选项页面、帮助,等等)。接下来您将添加这些功能。
步骤 3:向最小的 Hello World RCP 应用程序添加菜单和动作
菜单和动作将通过两种途径添加。这里,我们以编程方式来将它们添加到 RCP 应用程序。后面您将通过扩展点来添加。
将添加以下五个菜单:
File
Window
Help
Window/Open perspective
Window/Show view
然后添加以下六个动作:
File/Exit
Window/Open perspective/Other
Window/Show view/Other
Window/Preferences
Help/Help contents
Help/About
您在这里添加的动作是通常包含在 Eclipse IDE 中的预构建动作。然而,RCP 为了您的方便将它们提供给您。要理解这些菜单和动作是如何定义的,请查看 com.ibm.plte.help 特性项目中的 ApplicationActionBarAdvisor.java。注意,使用工作框架,您可以贡献您自己的动作。后面将使用扩展点来做到这一点。
实施步骤:
用 com.ibm.plte.help 特性项目中一个相同名称的文件替换 com.ibm.plte 插件的 com.ibm.plte.ApplicationActionBarAdvisor.java。
确保已关闭先前打开的 RCP 应用程序。返回 com.ibm.plte (plugin.xml) 编辑器的 overview 页面,并单击 Testing 部分的 Launch an Eclipse application。RCP 应用程序应该有多个菜单。
图 3. 具有一些菜单的 RCP 应用程序
单击 Window > Open Perspective > Other。在 Select Perspective 对话框中,您将会看到一个名为 Plte Perspective (default) 的透视图。这是您使用 Hello RCP 模板创建的透视图。
单击 Window > Show View > Other。您将看到一个空的 Show View 对话框。这是因为您还没有将任何首选项添加到 RCP 应用程序。我们将在下一节中做到这一点。
单击 Window > Preferences。您将会看到 Preferences 对话框。这是因为您还没有将任何 preference 添加到 RCP 应用程序。我将在下一节中做到这一点。
单击 Help > About。About 对话框除了三个按钮,什么都没有。About 对话框提供关于安装在您的 RCP 应用程序中的特性和插件集合的信息。因为您还没有添加任何特性,所以对话框是空的。
单击 Plug-in Details。对话框将显示作为 RCP 应用程序一部分的插件的完全列表。我们将看到 10 个 RCP 插件,以及我们创建的一个插件。
单击该对话框中的 com.ibm.plte 插件,注意到 More Info 按钮是被禁用的。More Info 提供有关插件的附加信息。如果您希望提供有关您的插件的附加信息,您需要将其添加到 about.html 文件中。我们将在下一步做到这一点。
图 4. Hello World RCP 应用程序中包含的插件
我们没有执行的动作是 Help > Help Contents。这需要许多没有包含在 Hello World RCP 应用程序中的 Help 插件。因此,该动作直到添加了必需的 Help 插件才会运行。我们将在下一节做到这一点。
步骤 4:向最小的 Hello World RCP 应用程序添加插件信息
这里,您通过 about.html 文件提供插件的有关信息:
将 about.html 从 com.ibm.plte.help 特性项目移动到 com.ibm.plte 插件。
确保已关闭先前打开的 RCP 应用程序。返回到 com.ibm.plte (plugin.xml) 编辑器的 overview 页面,并单击 Testing 部分的 Launch an Eclipse application。
单击 Help > About。
单击 Plug-in Details。
选择 com.ibm.plte 插件。More Info 按钮将启用。
单击 More Info,about.html 将打开在浏览器中。
图 5. com.ibm.plte 插件的描述
向 Hello World RCP 应用程序添加 Eclipse 功能
这时,除几个菜单、动作和一个 about.html 文件以外,Hello World RCP 应用程序是一个空架子。 在本节中,您将贡献四个 Eclipse 功能:菜单/动作、首选项页面、视图和 帮助。您将采用简单的路径,并使用 PDE 模板来生成这些功能。
步骤 1:添加菜单/动作、首选项页面、视图和 帮助
单击 Ctrl+N 打开 new 向导。
选择 Plug-in Project 并单击 Next。
在 Project name 文本域输入 com.ibm.plte.ui,然后单击 Next。
单击 Next。
选择 Custom plug-in wizard 并单击 Next。
单击 Deselect All 并单击 "Hello World" Action Set, Help Table of Contents, Preference Page 和 View。单击 Finish。
步骤 2:运行具有四个 Eclipse 功能的 Hello World RCP 应用程序
到现在为止,您已经使用 com.ibm.plte (plugin.xml) 编辑器的 overview 页面中的 Launch an Eclipse application 链接来启动 Hello World RCP 应用程序。在这一步骤中,因为 RCP 应用程序需要 Help 附加插件依赖项,所以您将使用 Run 对话框来启动 RCP 应用程序。
实施步骤:
确保已关闭先前打开的 RCP 应用程序。选择 Run > Run 打开 Run 对话框。
选择 Eclipse Application > Eclipse Application configuration。
切换到 Plug-ins 选项卡
选择 com.ibm.plte.ui 插件。选择 Add Required Plug-ins 并将下列插件添加到 External Plug-ins 部分的下面:
org.apache.ant
org.apache.lucene
org.eclipse.help.appserver
org.eclipse.help.base
org.eclipse.help.ui
org.eclipse.help.webapp
org.eclipse.tomcat
org.eclipse.ui.forms
单击 Run。应用程序会出现附加的 Sample Menu。
图 6. 具有 Help 菜单的 Hello World RCP 应用程序
单击 Window > Show View > Other。选择 Sample Category 文件夹下面的 Sample View。添加依赖的 Help 插件导致间接添加了 Help 文件夹。单击 OK 打开 Sample View。
图 7. 具有视图的 Hello World RCP 应用程序
单击 Window > Preferences 打开首选项对话框。检查 Sample Preferences 首选项页面已在对话框中。由于添加依赖的 Help 插件,导致间接添加了 Help 首选项页面。
图 8. Hello World RCP 应用程序的首选项对话框
单击 Sample Menu > Sample Acton。一个信息对话框将会打开。
单击 Help > Help Contents。Help 浏览器将打开并显示 Help book Test TOC。
图 9. Hello World RCP 应用程序的 Help 内容
步骤 3:启用 Hello World RCP 应用程序工具条
可以将动作添加到菜单条或工具条。要在工具条中显示动作,您首先需要在 RCP 应用程序中启用工具条。当使用 Hello RCP 模板生成 RCP 应用程序时,默认是不启用工具条的。完成以下步骤启用工具条:
从 the com.ibm.plte 项目打开 com.ibm.plte.ApplicationWorkbenchWindowAdvisor.java。
将 configurer.setShowCoolBar(false); 改为 configurer.setShowCoolBar(true); 并保存文件。
确保已关闭先前打开的 RCP 应用程序。返回到 com.ibm.plte (plugin.xml) 编辑器的 overview 页面。单击 Testing 部分的 Launch an Eclipse application。现在您将看到具有单个动作的工具条。单击该动作会出现与从 Sample Menu 单击 Sample Action 出现的相同消息对话框。
图 10. 具有工具条的 Hello World RCP 应用程序
步骤 4:在 Eclipse IDE 中部署上述四个功能
上面四个功能不是 RCP 应用程序所独有的。它们也可以是 Eclipse 工具的一部分。这是 Eclipse 框架优点:可以重用 Eclipse 组件。在这一步骤中,将上述四个功能添加到 Eclipse IDE:
确保已关闭先前打开的 RCP 应用程序。单击 Run > Run 打开 Run 对话框。
创建一个新的 Eclipse Application configuration。
单击 Run。另一个 Eclipse IDE 工作台将打开。验证上面的四个功能出现在该运行时工作台中。
创建一个 RCP 产品
创建 Hello World RCP 产品
用 Eclipse 术语来讲,产品是伴随您的应用程序的所有东西,包括所依赖的其他插件、特性、一个运行应用程序的命令(称作本机启动程序)和任何使您的应用程序与众的不同烙印(图标等)。
在 Eclipse 里有两种烙印:特性级的和产品级的。不存在用于定义特性烙印的扩展点。该过程包括将特性烙印文件放入插件中,然后在特性定义 (feature.xml) 中定义该插件。如果特性 ID 与插件 ID 相同,则不必在特性定义中定义插件。在本节中,您将烙印一个名为 com.ibm.plte 的特性。注意,该特性与插件 com.ibm.plte 具有相同的 ID。
产品烙印是通过 org.eclipse.core.runtime.product 扩展点实现的。Eclipse 提供 Product Configuration 编辑器来帮助创建产品扩展点。您必须设置该扩展点的一个属性就是产品名。您将定义产品名为 com.ibm.plte.product。注意,尽管 RCP 是在 Eclipse V3.0 中引入的,但 Product Configuration 功能却是到 Eclipse V3.1 才出现的。您也可以在 V3.0 中手动创建 RCP 产品,但是这要复杂得多。
注意,因为 Eclipse IDE 是一个 RCP 应用程序,所以它也定义了该产品扩展点。Eclipse IDE 定义的产品名是 org.eclipse.sdk.ide。
为烙印 Hello World RCP 应用程序,该教程提供了很多烙印特定的文件。下表显示了商标文件与被烙印的 RCP 应用程序之间的对应关系。
表 3. 用于定制 Hello World RCP 应用程序的示例烙印文件的描述
icons/jdg2eAbout.gif | 定制 About 对话框:![]() |
icons/jdg2eProd.gif | 定制窗口系统图像:![]() |
splash.bmp | 定制 splash 屏幕:![]() |
about.ini about.properties icons/jdg2eFeat.gif | 这些文件定制特性烙印。about.ini 为 com.ibm.plte 特性定义将显示在 About 对话框中的图像和 About 信息。about.properties 文件提取显示文本,以便将文本翻译出来。![]() ![]() |
步骤 1:烙印一个特性并创建一个 Hello World RCP 产品
实现步骤:
从 com.ibm.plte.help 特性项目,将下列文件夹/文件移动到 com.ibm.plte 插件项目:
icons folder
splash.bmp
about.ini
about.properties
右键单击 com.ibm.plte 项目并选择 New > Product Configuration,以打开 New Product Configuration 对话框。
在 File name 文本域输入 plte.product。
选中 Use a launch configuration 单选按钮并单击 Finish。plte.product 编辑器将会打开。
在 plte.product 编辑器的 overview 页面上,单击 Product ID 旁边的 New。New Product Definition 对话框将会打开。
选择 com.ibm.plte 项目作为 Defining Plug-in。
在 Product ID 文本域输入产品并单击 Finish。
在 Product Name 文本域输入 PLTE。
选中 Features 单选框。
切换到 Configuration 页面。
单击 New Feature。New Feature 向导将打开。
在 Project name 文本域输入 com.ibm.plte-feature 并单击 Next。
将 Feature ID 修改为 com.ibm.plte 并单击 Next。
选择插件 com.ibm.plte 和 com.ibm.plte.ui,然后单击 Finish。com.ibm.plte (feature.xml) 编辑器将打开。
切换到 Information 页面,然后再切换到 License Agreement 页面。将 Optional URL 文本域的内容修改为 license.html。
切换到编辑器的 Included Features 页面并单击 Add。
选择特性 com.ibm.plte.help 和 org.eclipse.rcp,然后单击 OK。保存 feature.xml。
回到 plte.product 编辑器并切换到 Branding 页面。
在 Launcher Name 文本域输入 plte。
选择针对 splash 屏幕的 com.ibm.plte 插件。
对于 16x16 窗口图像,选择 com.ibm.plte/icons/jdg2eProd.gif。
对于 About 对话框图像,选择 com.ibm.plte/icons/jdg2eAbout.gif。
在 Text 文本域输入 This is a sample PLTE application。
保存 plte.product。
将 license.html 从 com.ibm.plte.help 特性项目移动到 com.ibm.plte 特性项目。
步骤 2:运行 Hello World RCP 产品
实现步骤:
确保已关闭先前打开的 RCP 应用程序。转到 plte.product 的 overview 页面并单击 Launch the product。在 RCP 应用程序打开之前,您将看到一个 splash 屏幕。检验应用程序如图 16 所示。注意,RCP 应用程序的左上角有您在 plte.product 中指定的图像。
图 16. Hello World RCP 应用程序
单击 Help > About PLTE。最初,这个 Action 名被标为 About,但是现在附加上了您在 plte.product 中定义的产品名。因为应用程序现在包含特性,所以 About 对话框提供了有关您的应用程序的附加信息。About 对话框与下图类似。注意,由于存在一个 bug,所以 Feature Details 按钮只显示 org.eclipse.rcp 特性,而不显示 com.ibm.plte 特性。只有已经烙印过的特性才会显示在 Feature Details 对话框中,所以您将看不到 com.ibm.plte.help 特性。当您在下一节中导出并运行该 RCP 应用程序时,您将看到 com.ibm.plte 特性。
图 17. Hello World RCP 应用程序的 About 对话框
在 Eclipse 之外部署
在开发一个应用程序之后,目标是部署和运行独立的应用程序,用户不必知道底层所使用的 Java 和 Eclipse 代码。对于一个真正的应用程序,您可能会提供一个由类似 InstallShield 或 NSIS 这样的安装程序生成的一个自包含的可执行文件。这超出了本教程的范围,因此您实际上将创建一个 Eclipse 安装目录的简化版本。该目录必须包含本机启动程序、startup.jar、config.ini 和产品需要的所有插件和特性。
Eclipse 提供一个 Eclipse Product 导出向导来帮助您在文件系统中构建 Eclipse 安装目录。
步骤 1:将 Hello World RCP 产品导出到文件系统
所有插件和特性项目都包含一个 build.properties 文件。该文件由 Eclipse 用来指出应该导出哪些文件。在导出 RCP 应用程序之前,您必须用添加到 com.ibm.plte 插件和 com.ibm.plte 特性的附加文件或文件夹来更新该文件。build.properties 文件不必手动更新。您可以使用 plugin.xml 或 feature.xml 编辑器的构建页面。
实现步骤:
转到 com.ibm.plte (plugin.xml) 编辑器的构建页面。选择将用 com.ibm.plte 插件导出的以下文件或文件夹并保存文件:
about.html
about.ini
about.properties
icons folder
splash.bmp
转到 com.ibm.plte (feature.xml) 编辑器的构建页面。选择将用 com.ibm.plte 特性导出的文件 license.html 并保存文件。
转到 plte.product 编辑器的 overview 页面并单击 Eclipse Product export wizard,以启动 Export 向导。
选择 Directory 作为 Export Destination。指定文件系统上的一个位置以导出 RCP 应用程序,并单击 Finish。
步骤 2:从文件系统运行 Hello World RCP 产品
实现步骤:
确保已关闭先前打开的 RCP 应用程序。使用命令提示符窗口,转到您导出应用程序的位置。运行 plte.exe 命令。先前您所运行的同一 RCP 应用程序将打开。
单击 Help > About PLTE 打开 About 对话框。注意,对话框在 Feature Details 按钮上有两个图标。第一个代表 org.eclipse.rcp 特性,第二个代表 com.ibm.plte 特性。
图 18. Hello World RCP 应用程序的 About 对话框
单击 Feature Details 打开 About Feature 对话框。
选择 com.ibm.plte 特性。注意,License 按钮是启用的。这是因为您早先添加了一个 license.html 文件。
单击 License 在浏览器中打开 license.html。
图 19. Hello World RCP 应用程序的示例许可
找到并打开 com.ibm.plte 插件的 plugin.xml。注意,该插件定义了三个扩展点:
org.eclipse.core.runtime.applications - 是在第 1 部分使用 Hello RCP 模板创建的
org.eclipse.ui.perspectives - 是在第 1 部分使用 Hello RCP 模板创建的
org.eclipse.core.runtime.products - 是在第 3 部分使用 Product Configuration 编辑器创建的
图 20. com.ibm.plte 插件的 plugin.xml
返回到 Eclipse 工作台。单击 Run > Run 打开 Run 对话框并选择 Eclipse Application > Eclipse Application configuration。注意,该配置包含应用程序 com.ibm.plte.application 和产品 com.ibm.plte.product。
图 21. 启动 Configuration 对话框
结束语
在本教程中,我们学习了如何构建一个基于 Java 和 Eclipse 的富客户机应用程序。Eclipse V3.1 中的新工具使得构建 RCP 应用程序变得更加容易。在 Eclipse V3.0 中,这是一个更加手动的过程,而 Eclipse V3.1 允许您从 RCP 模板快速生成应用程序,并用易于使用的 UI 来打包和烙印您的插件。我们还学习了如何向 RCP 应用程序添加 Help。