作者:陈刚,桂林人,97年毕业于广西师范大学数学系,暂于IBM中国研究中心以外包人员身份从事软件开发(2004.2-?),专注基于java平台的软件开发。
email:glchengang@hotmail.com
blog:glchengang.yeah.net
一、新建项目。
按照上一篇的新建插件项目的方法,新建一个名为myplugin2的插件项目,注意:在最后一步选择“建立白空插件项目”,除此,其它都一样。截图如下:
附注:发现又有上一篇的错误,中文版的Eclipse在新建项目时,比较容易有“由于类路径错误(不完整或涉及循环),所以未构建项目。”这类的错误。好办,因为中文包只是一些文本文件,对开发没用,用前面一篇所说的方法删除那些对中文包的引用(前面字符为ECLIPSE_HOME_LANGUAGE_LINK…….),如下图:
二、插件开发的几个关注点。
a) 库引用。如上附注所说库引用是在建立插件初期要设置好的地方,不过一经设置基本不需要再改变。功能类似于JDK的classpath或者Jbuilder里的库引用。
b) 插件JAVA源代码。今后主要的工作,狂写代码吧。主要都是一些*.JAVA文件。
c) 项目根目录下的plugin.xml文件。这个文件是插件的入口文件,Eclipse根据这个文件中的设置来加载插件。代码写完了,要让Eclipse加载你的代码就要在这里面做些手脚了,这些手脚有个术语叫“设置扩展点”。象在Eclipse的加个主菜单、视图、按钮,都在这个文件里面做不同的扩展点,后面的教程会看到这个文件的使用。要人会说那我开发一个系统会有很多的菜单和按钮,那是不是都要设置这个文件呢?回答:不必,这里面只设置主要和Eclipse接壤的扩展点,其它系统里的菜单按钮就没必要了,今后会讲到。
三、设置库引用。
在删除了上面附注所说的无用且出错的引用,接下来我们要加入一些开发插件要用到的库。是那些呢?呵呵,前面我们还是用向导建立了一个helloword插件吗,参考它的就行了。如下图:
手工加可真累,这里有个好办法。把目录C:\eclipse2.1.3\eclipse\workspace\myplugin\下的.classpath文件拷贝到C:\eclipse2.1.3\eclipse\workspace\myplugin2目录就行了。所有关于库引用的设置全保存在这个文件中。最后别忘记刷新一下项目,如下图所示:
附注说明:
有些文章在这里是用“文件>导入...>外部插件和段”来提供插件开发支持库的引用,本文不采用这种方法,因为这种会将支持库(也是一种插件项目)会新建很多相应项目,让开发界面显得很乱。还不如本文所用的建立库引用变量的方法方便简洁。
四、写源代码。
a) 新建一个包。方法如下图所示。
包名如下:
结果如下:
b) 然后将上一章的myplugin的SampleAction直接移动本项目myplugin2中就可以了(Eclipse支持鼠标拖拉操做)。
c) 本文SampleAction做了一些小修改(删除了注释和构造函数)。代码如下:
public class SampleAction implements IWorkbenchWindowActionDelegate {
private IWorkbenchWindow window;
public void run(IAction action) {
//这是打开一个提示窗口
MessageDialog.openInformation(window.getShell(), "myplugin 插件", "这是手工做的插件");
}
public void selectionChanged(IAction action, ISelection selection) {}
public void dispose() {}
public void init(IWorkbenchWindow window) {
this.window = window;
}
}
五、在plugin.xml文件中加入扩展点的代码。
库将本项目plugin.xml文件打开,并转到其源代码视图。将如下代码加入到“</runtime>”之后。(这些xml还是从上一章的项目搬过来的
<requires>
<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.ui"/>
</requires>
<extension point="org.eclipse.ui.actionSets">
<actionSet label="样本操作集" visible="true" id="myplugin.actionSet">
<menu label="样本菜单" id="sampleMenu">
<separator name="sampleGroup"> </separator>
</menu>
<action
label="样本操作"
icon="icons/sample.gif"
class="com.glchengang.SampleAction"
tooltip="Hello,Eclipse world"
menubarPath="sampleMenu/sampleGroup"
toolbarPath="sampleGroup"
id="com.glchengang.SampleAction">
</action>
<action
label="样本操作2"
icon="icons/sample.gif"
class="com.glchengang.SampleAction"
tooltip="Hello,Eclipse world2"
menubarPath="sampleMenu/sampleGroup2"
toolbarPath="sampleGroup2"
id="com.glchengang.SampleAction2">
</action>
</actionSet>
</extension>
说明:
a) requires域中定义了该插件所要使用的依赖插件,随着开发的不断深入,这里将会填加更多的引用,现在两项就够了
b) 在extension中说明了要们要扩展org.eclipse.ui. actionSets扩展点, <actionSet>…..</ actionSet >表示一个action组(按钮、菜单)。还有其它类型的扩展点,如org.eclipse.ui.views是视图的扩展点,org.eclipse.ui.editors是编辑器的扩展点,各种扩展点在eclipse的帮助中有详细的说明。label是显示的名称。id是唯一标识符,只要保证在plugin.xml文件不存在重复的id就行了,这里建议以包路径和类名的组合来做为id。
c) <menu>….</menu>表示菜单separator标签是一个结束符,它可以对菜单分组
d) <action>....</action>表示按钮。Icon是图片的路径,绝对路径是什么大家实际对照就知道了,如果eclipse找不到这个图片,默认是一个红色实心小框。Class是这个按钮所对应的类,注意把包名写全,这样比较规范些。menubarPath表示把这个action做成一个菜单放在上前<menu>….</menu>定义的主菜单下。toolbarPath表示把这个action做成一个工具栏按钮。在这里为了方便比较我将这个action的设置复制成了两份,大家可以自己改改其中的设置,然后看看实际效果。
e) 各详细的plugin.xml大家可以参考eclipse自带的帮助文件,这里仅做一个入门性的说明。
六、按钮前面一章所说的方法运行插件(运行之前注意将原来那个向导做的myplugin项目关闭掉,关闭方法:鼠标右键点击此项目->弹出菜单中选择关闭项目)。插件效果如下图
参考文档
http://bsd.huangdong.com/dev/eclipseplugin/startup.html