分享
 
 
 

5.2 插件的Hello World

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

*******************************************************

作者:陈刚,普通程序员,曾有幸以Eclipse插件方式开发过一个中型软件。现将所学

付诸于纸,暂取书名<Eclipse插件开发指南>,将于2005年初由清华大学出版社出版。

blog:http://www.cnblogs.com/glchengang/

*******************************************************

5.1.1 Eclipse插件开发简介

插件的概念读者应该很熟悉,象MP3播放软件WINAMP的皮肤插件、Windows Media Player的众多的外观插件、音效插件等等。但如果你以为插件只能做成为原软件的边角料,那是可以理解的,因为你还没有看到过Eclipse的插件是什么样的。Eclipse可以全面更新你对插件的概念,它也是对插件概念运用得最彻底最炉火纯青的一个软件。

在第一章我们就介绍了Eclipse的技术特点,Eclipse的内核很小,其他功能都是基于这个内核上的插件,如Eclipse自带的UNIT、ANT等。而且Eclipse还开放了自己的插件机制,并提供了很好的插件开发环境,让用户可以自己来开发Eclipse的插件。想知道开发Eclipse的插件能到什么程度吗?看看这些Eclipse上的插件吧:用于UML建模的Together for Eclipse、用于JSP的MyEclipse和Lomboz、IBM的全能开发工具WSAD等等,它们全是Eclipse的插件。如果微软愿意,也可以把Office软件做成Eclipse的插件。如果Adobe有兴趣,Photoshop也可以有for Eclipse的插件版,Eclipse中的API Draw2D的绘图功能也是很功的。

Eclipse的各式插件正如雨后春笋般不断冒出,Eclipse已经超越了开发环境的概念,它的目标是做成一个通用的平台,让尽量多的软件做为插件集成在上面,成为未来的集成的桌面环境。同样我们可以将我们的应用系统写成Eclipse插件,笔者就在2004年参与开发了一个项目管理软件,该软件就是以Eclipse的插件形式开发的。

5.1.2 Eclipse插件开发的优势和不足

那么将软件写成插件有什么好处呢?对于用户来说Eclipse的使用环境比较友好,前面介绍的SWT/JFace中还是比较基本的界面元素,象Eclipse中的视图、编辑窗、停泊窗这些界面如果实现呢?如果用Appliction的方式会很麻烦,如果写成Eclipse插件则实现这些界面风格不会吹灰之力。可以说把软件开发成Eclipse插件的最大好处就是界面风格友好统一,如果用户较熟悉Eclipse超做的话这种优势就更明显。

当然将软件写成插件形式也有一定的缺陷。首先插件必须依附Eclipse,如果要安装插件就得先安装Eclipse。其次,插件和Eclipse融合在一起,原Eclipse的一些菜单和工具栏是无法完全屏蔽的。

5.2 插件的Hello World

5.2.1 使用向导一步步创建HelloWorld

我们利用Eclipse的“新建”向导来创建一个简单的插件。

1、新建一个插件项目

(1)选择主菜单“文件→新建→项目”,在弹出的窗口中(如图5.1所示)选择“插件开发”下的“插件项目”,然后单击“下一步”。

图5.1 项目类型选择

(2)如图5.2所示,输入项目名“myplugin”,其他设置不变,然后单击“下一步”。

图5.2 项目名称

(3)在新显示的窗口中接受所有缺省值不变,直接单击“下一步”,这时将显示模板选择窗口(如图5.3所示)。勾选“使用其中一个模板来创建插件”项,然后选择模板“Hello,World”项。最后单击“完成”结束向导对话框。

图5.3 模板选择窗口

2、插件项目myplugin简介

如果在新建项目中操作正确,Eclipse将显示如图5.4所示界面。

图5.4 建立一个插件项目后的Eclipse界面

界面的左边视图中多了一个名为“myplugin”的项目。项目中有两个文件:MypluginPlugin.java、SampleAction.java。MypluginPlugin.java较重要,今后将会使用到它,而SampleAction.java则是一个类似JFace中的Action,可以把它看做是插件中的Action,等会运行时我们将看到SampleAction.java的效果。

项目根目录下还有一个非常重要文件的plugin.xml,这个文件是插件的入口文件,Eclipse是根据这个文件里的设置信息来加载插件的。在插件加发初期会频繁在这个文件中做编辑,术语叫“设置扩展点”。象在Eclipse的增加主菜单、视图、按钮等,都是在这个文件里面设置不同的扩展点,后面的将详细讲到如何编辑此文件。有人会问:开发一个系统会有很多的菜单和按钮,是不是都要在这个文件里设置呢?回答:不必。在plugin.xml里只设置和Eclipse接壤的主要扩展点,其他软件自有的菜单和按钮不用在plugin.xml设置了。图5.4的Eclipse界面中部显示的就是plugin.xml的设置窗口,单击该窗口下部的plugin.xml项后(如图5.5所示),就可以直接编辑此文件。

图5.5 plugin.xml编辑窗下部的选项条

3、运行插件

如图5.6所示,选择主菜单“运行→运行方式→运行工作平台”,这种是专用是插件的运行方式,它将打开一个新的Eclipse环境,并同时将插件项目编译加载到新的Eclipse环境中。今后开发经常要通过这个方法来试运行所开发的插件项目,不过那时候选择“运行→调试方式→运行工作平台”以调试方式来运行插件会比较多,Eclipse支持调试期间的热修改,不用每次修改都新启一个Eclipse,这样能节省很多调试开发时间。

新开的Eclipse界面如图5.6所示,在新的Eclipse环境中新增加了一个工具栏按钮和一个主菜单项。单击此按钮或菜单项,将弹出一个“Hello,Eclipse world”信息提示框。

图5.6 myplugin插件运行效果图

4、总结

本节里我们还只是依样画葫芦,感觉有点云里雾里的吧。但不管怎么样,第一个Eclipse插件已经在我们手里诞生了,下一节我们将不用HelloWorld模板来新建一个空白的插件项目,然后一步步的经过手工实现这个Hello World插件项目所拥有的功能。

5.2.2 以空白项目为基础手工创建HelloWorld

1、新建项目

按照上一节所讲新建插件项目的方法,新建一个名为myplugin2的插件项目。注意在最后一步不要选择任何模板,直接单击“完成”结束向导对话框,除此之外的其他步骤都一样。很幸运,Eclipse3.0修正了很多BUG,象以前用Eclipse2.X中文版时,在这一步还会出很多库引用的错误,要很麻烦的一个个去修正。

2、创建IWorkbenchWindowActionDelegate接口的实现类

新建一个包book.chapter_5,并将上一节中由HelloWorld模板生成的myplugin项目中的SampleAction.java文件复制到本项目中(Eclipse支持鼠标拖拉操做)。然后对SampleAction做了一些小修改:删除了无用的注释和构造函数,修改了一下弹出框的提示文字,修改后的代码如下:

/**

* 本类相当于插件的Action,要在Eclipse中增加主菜单或工具栏按钮,

* 就需要写一个实现IWorkbenchWindowActionDelegate接口的类

*/

public class SampleAction implements IWorkbenchWindowActionDelegate {

private IWorkbenchWindow window;

public void run(IAction action) {

//打开一个信息提示框

MessageDialog.openInformation(window.getShell(),

"Myplugin2插件", "Hello,这是手工做的插件");

}

public void selectionChanged(IAction action, ISelection selection) {}

public void dispose() {}

public void init(IWorkbenchWindow window) {this.window = window;}

}

3、原plugin.xml文件各设置项说明

如图5.7所示,将plugin.xml文件打开,并单击窗口下的“plugin.xml”项转到其代码编辑窗。

图5.7 plugin.xml的代码编辑窗

项详细介绍其中的各项设置如下:

(1)<plugin>项

<plugin

id="myplugin2"

name="Myplugin2 插件"

version="1.0.0"

provider-name=""

class="myplugin2.Myplugin2Plugin">

说明:<plugin>是plugin.xml的主体。

l id - 插件的唯一标识。实际项目中一般加上包名或网址名来命名id,比如eclipse的tomcat插件是这样命名的:org.eclipse.tomcat,这样在世界上就不会有插件的标识名和你重名了。以后在某些扩展点中的属性也会用到标识符作为名称的前缀。

l name - 插件的名称,可以不唯一。

l version - 插件版本号。

l provider-name - 插件开发商的名称,可以写上作者或公司的名称。

l class - 插件类的名称,即插件项目自动生成的MypluginPlugin2.java文件的类,前面加上包名。

(2)< runtime>项

<runtime>

<library name="myplugin2.jar">

<export name="*"/>

</library>

</runtime>

说明:这里是声明插件运行时需要的jar包,比如插件要连接MySQL数据库需要它的一个包,如下定义,其中“lib\”是该包所在路径。其中本插件自身的jar包也要声明,而且本插件在打包时将以myplugin2.jar为名打包。

<runtime>

<library name="myplugin2.jar">

<export name="*"/>

</library>

<library name="lib\mysql-connector-java-3.0.9-stable-bin.jar"/>

</runtime>

(3)<requires>项

<requires>

<import plugin="org.eclipse.ui"/>

<import plugin="org.eclipse.core.runtime"/>

</requires>

说明:在requires域中定义了该插件所要使用的依赖插件。现在两项就够了,随着开发的不断深入这里将会添加更多对其它插件的引用。如下是笔者的实际项目中的requires设置,它要用到draw2d和gef插件来画图、用于插件的帮助系统来创建建自己的帮助文档。

<requires>

<import plugin="org.eclipse.ui"/>

<import plugin="org.eclipse.core.runtime"/>

<import plugin="org.eclipse.core.resources"/>

<import plugin="org.eclipse.draw2d"/>

<import plugin="org.eclipse.gef"/>

<import plugin="org.eclipse.help"/>

<import plugin="org.eclipse.help.ui"/>

<import plugin="org.eclipse.help.appserver"/>

<import plugin="org.eclipse.help.webapp"/>

</requires>

4、为HelloWorld修改plugin.xml

将如下代码加入到plugin.xml的“</requires>”行之后:

<extension point="org.eclipse.ui.actionSets">

<actionSet

label="样本操作集"

visible="true"

id="myplugin2.actionSet">

<menu

label="样本菜单(&amp;M)"

id="sampleMenu">

<separator

name="sampleGroup">

</separator>

</menu>

<action

label="样本操作(&amp;S)"

icon="icons/sample.gif"

class="book.chapter_5.SampleAction"

tooltip="Hello,这是手工做的插件"

menubarPath="sampleMenu/sampleGroup"

toolbarPath="sampleGroup"

id="book.chapter_5.SampleAction">

</action>

</actionSet>

</extension>

说明:

在<extension>项设置要扩展的扩展点,它是非常重要的一项。

l point="org.eclipse.ui.actionSets",设置了本插件的扩展点为何,actionSets是指Eclipse的菜单、菜单项和工具栏按钮的扩展点

l <actionSet>项表示一个action组(菜单、按钮)。label是显示的名称。id其唯一标识符,只要保证在本plugin.xml文件中不存在重复的id就行了。visible指设置的按钮或菜单是否显示,如果设置成false,则不显示。注意:要看visible设置的效果要将“透视图”关掉再重新打开。

l <menu>是<actionSet>下的子项,它表示在Eclipse中插入显示一个名为“样本菜单(M)”的主菜单。separator标签是一个结束符,它可以对菜单分组。

l <action>也是<actionSet>下的子项,由它设置菜单、按钮。icon是图片的路径,如果该图片不存,默认是一个红色实心小框(Eclipse2.X)或不显示图片而显示文字(Eclipse3.X)。Class是按钮所对应的类,注意包名也要加上。menubarPath表示把这个action做成一个菜单项放在上前<menu>定义的主菜单下。toolbarPath表示把这个action再做成一个工具栏按钮。id是标识符,设置成和class项一样的名称是个不错的选择。

以上仅是Eclipse的扩展点中的一种,此外还有其它的扩展点共有一百多种之多。我们没有必要了解所有扩展点的设置,只须熟悉一些常用的扩展点即可,如视图的扩展点org.eclipse.ui.views、编辑器的扩展点org.eclipse.ui.editors等,本书将陆续给于介绍。另外,各种扩展点在Eclipse的帮助中有详细的说明,其位置为:选择主菜单“帮助→帮助内容”,然后打开“平台插件开发指南→参考→扩展点参考”项。

5、运行插件

按上一节(5.2.1节)所说的方法运行插件(运行之前不妨将上节所建的myplugin项目关闭掉,关闭方法:右键单击myplugin项目名,然后在弹出菜单中选择“关闭项目”)。myplugin2插件的效果如图5.8所示

图5.8 myplugin2插件运行效果图

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有