java

位置:IT落伍者 >> java >> 浏览文章

开发Eclipse插件


发布日期:2024年03月11日
 
开发Eclipse插件

在本文中David Gallardo 向您展示了如何使用 Plugin Development Environment 的代码生成向导来创建Eclipse插件您将学到如何在运行时工作台中运行和调试插件并且在 Eclipse 中安装完成的插件David还研究了与打包插件相关的问题包括维护版本信息以插件片段的形式更新功能以及组合插件来创建完整的功能部件

基于插件的体系结构

Eclipse平台是IBM向开发源码社区捐赠的开发框架它之所以出名并不是因为IBM宣称投入开发的资金总数 —千万美元—而是因为如此巨大的投入所带来的成果一个成熟的精心设计的以及可扩展的体系结构Eclipse的价值是它为创建可扩展的集成开发环境提供了一个开放源码平台这个平台允许任何人构建与环境和其它工具无缝集成的工具

工具与 Eclipse 无缝集成的关键是插件除了小型的运行时内核之外Eclipse 中的所有东西都是插件从这个角度来讲所有功能部件都是以同等的方式创建的从这个角度来讲所有功能部件都是以同等的方式创建的

但是某些插件比其它插件更重要些Workbench 和 Workspace 是 Eclipse 平台的两个必备的插件 — 它们提供了大多数插件使用的扩展点如图 所示插件需要扩展点才可以插入这样它才能运行

Eclipse Workbench 和 Workspace必备的插件支持

Workbench 组件包含了一些扩展点例如允许您的插件扩展 Eclipse 用户界面使这些用户界面带有菜单选择和工具栏按钮请求不同类型事件的通知以及创建新视图Workspace 组件包含了可以让您与资源(包括项目和文件)交互的扩展点

当然其它插件可以扩展的Eclipse组件并非只有Workbench和Workspace此外还有一个Debug 组件可以让您的插件启动程序与正在运行的程序交互以及处理错误 — 这是构建调试器所必需的虽然 Debug 组件对于某些类型的应用程序是必需的但大多数应用程序并不需要它

还有一个 Team 组件允许 Eclipse 资源与版本控制系统(VCS)交互但除非您正在构建 VCS 的 Eclipse 客户机否则 Team 组件就象 Debug 组件一样不会扩展或增强它的功能

最后还有一个Help组件可以让您提供应用程序的联机文档和与上下文敏感的帮助没有人会否认帮助文档是专业应用程序必备的部分但它并不是插件功能的必要部分

上述每个组件提供的扩展点都记录在 Eclipse Platform Help 中该帮助在 Platform Plugin Developer 指南的参考部分中乍一看尤其是 API 参考大全的 Workbench 部分一开始会令人望而却步我们不会深入了解众多可用扩展点的详细信息而只是粗略地看一个简单插件及其组件

插件简介

创建插件最简单的方法是使用 Plugin Development Environment(PDE)PDE 和 Java Development Tooling(JDT)IDE 是 Eclipse 的标准扩展PDE 提供了一些向导以帮助创建插件包括我们将在这里研究的Hello world示例

从 Eclipse 菜单选择 File=>New=>Other(或按 CtrlN)然后选择 Select 对话框左边的 Plugin Development 向导在 Select 对话框的右边选择 Plugin Project按 Next在下一屏上输入项目名称我使用了 comexamplehello再次按 Next在下一屏上请注意插件标识就与项目名称相同使用项目名称作为插件标识可以将该插件与另一个插件的名称发生沖突的机会减到最小再按一次 Next下一屏让您选择是手工创建初始插件代码还是运行代码生成向导保留代码生成向导的缺省选项选择Hello World然后按 Next如图 所示

educitycn/img_///gif>

选择Hello World代码生成向导

下一屏要求一些附加信息请注意这一屏上的信息它包含了插件名称版本号提供者名称和类名这些是关于插件的重要信息我们将在稍后研究可以接受向导提供的缺省值按Next在下一屏幕上接受包名类名和消息文本的缺省值选择Add the action set to the resource perspective复选框按 Finish

如果接到通知向导需要启用某些其它插件才能完成那么按 OK

过一会儿向导将完成而在您的工作区中将会有一个新的项目名为 comexamplehello如图 所示

educitycn/img_///gif>

PDE 透视图Welcome to Hello Plugin

在Package Explorer中工作台的左边是向导创建的一些东西的概述大多数项都不引人关注包括项目类路径中的许多jar文件(这些包括插件和Java运行时所需的Eclipse类)一个图标文件夹(包含了工具栏按钮的图形)以及 buildproperties 文件(包含自动构建脚本所使用的变量)

这里最有意思的东西是 src 文件夹它包含了插件和 pluginxml 文件的源代码 — pluginxml 是插件的清单文件我们将先查看 pluginxml

插件清单文件

插件清单文件 pluginxml 包含了 Eclipse 将插件集成到框架所使用的描述信息缺省情况下当第一次创建插件时会在清单编辑器区域中打开 pluginxml编辑器底部的选项卡让您可以选择关于插件的不同信息集合Welcome 选项卡显示了消息Welcome to Hello PlugIn并且简要讨论了所使用的模板和关于使用 Eclipse 实现插件的提示选择Source选项卡可以让您查看 pluginxml 文件的完整源代码

让我们看看插件清单文件的各个部分首先是关于插件的常规信息包括它的名称版本号实现它的类文件的名称和 jar 文件名

清单 插件清单文件 — 常规信息

<?xmlversion= encoding=UTF?>

<plugin

id=comexamplehello

name=Hello Plugin

version=

providername=EXAMPLE

class=comexamplehelloHelloPlugin>

<runtime>

<library name=hellojar/>

</runtime>

接着列出了我们的插件所需的插件

清单 插件清单文件 — 必需的插件

<requires>

<import plugin=reresources/>

<import plugin=orgeclipseui/>

</requires>

列出的第一个插件reresources是工作区插件但实际上我们的插件并不需要它第二个插件 orgeclipseui 是工作台我们需要工作台插件因为我们将扩展它的两个扩展点正如后面的 extension 标记所指出的 [/img]

educitycn/img_///gif>

定制 Resource 透视图

操作集合包含了两个标记menu标记(描述菜单项应该出现在工作台菜单的什么位置以及如何出现)和action标记(描述它应该做什么)—尤其是action标记标识了执行操作的类这个类不是上面列出的插件类

清单 操作集合

<extension

point=orgeclipseuiactionSets>

<actionSet

label=Sample Action Set

visible=true

id=comexamplehelloactionSet>

<menu

label=Sample &Menu

id=sampleMenu>

<separator

name=sampleGroup>

</separator>

</menu>

<action

label=&Sample Action

icon=icons/samplegif

class=comexamplehelloactionsSampleAction

tooltip=Hello Eclipse world

menubarPath=sampleMenu/sampleGroup

toolbarPath=sampleGroup

id=comexamplehelloactionsSampleAction>

</action>

</actionSet>

</extension>

许多菜单和操作属性的目的相当明显 — 例如提供工具提示文本和标识工具栏项的图形但还要注意 action 标记中的 menubarPath这个属性标识了 menu 标记中定义的哪个菜单项调用 action 标记中定义的操作有关这个和其它工作台扩展点的详细信息请参考 Platform Plugin Developer Guide尤其是Plugging into the workbench章节(可以从 Eclipse 的帮助菜单中获取该指南)

由于我们选择了将插件添加到 Resource 透视图于是生成了第二个 extension 标记这个标记会导致当 Eclipse 第一次启动并装入我们的插件时将插件添加到 Resource 透视图

清单 extension 标记

<extension

point=orgeclipseuiperspectiveExtensions>

<perspectiveExtension

targetID=orgeclipseuiresourcePerspe               

上一篇:详细讲解Hibernate应用程序

下一篇:WEB开发中Struts常见错误及原因分析