Eclipse插件开发系列(3):Hello World插件(从无到有版)

类别:Java 点击:0 评论:0 推荐:

作者:陈刚,桂林人,97年毕业于广西师范大学数学系,暂于IBM中国研究中心以外包人员身份从事软件开发(2004.2-?),专注基于java平台的软件开发。
email: [email protected]
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


本文地址:http://com.8s8s.com/it/it16508.htm