热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于Eclispe插件开发起步(一)

Eclipse中三个最吸引人的地方是:第一是它创新性的图形API,就是SWTJFace.第二是它的插件机制.第三个是利用它的插件机制开发众多功能强大的插件.插件成就了Eclipse的

Eclipse中三个最吸引人的地方是:

第一是它创新性的图形API,就是SWT/JFace.

第二是它的插件机制.

第三个是利用它的插件机制开发众多功能强大的插件.

插件成就了Eclipse的今天.Eclipse的内核很小,其他功能都是基于这个内核上的插件.

如Eclipse中自代的JUnit,Ant等.如果微软愿意他可以把Office软件做成Eclipse的插件.

如果Adobe有兴趣,Photoshop也可以有for Eclipse的插件版.

Eclipse中的绘图API---Draw2D的功能也是很强的.

那么把软件写成Eclipse插件有什么好处呢?对于用户来说Eclipse的使用环境比较友好,

前面的SWT/JFace中还是比较基本的界面元素.像Eclipse中的视图,编辑窗,停泊窗这些界面如果用Application的方式会很麻烦.但是用

Eclipse插件的最大优点就是界面友好,风格统一,特别是对熟悉Eclipse操作的用户.这种优势更加明显.

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

插件的Hello World(第一个插件程序)步骤:

最后运行结果图:

界面的左边视图中多了一个名为myplugin的项目.项目中有两个文件:MypluginPlugin.java,SampleAction.java

可能是书中的Eclipse版本和我的不一样,.我的在本地生成java文件,第一个文件的名字是Activator.java 

>>>>>后来了解追加.>>>>>>>>

因为我看的书是第一版的,第一版作者写书的时候是在2004年,之后在07年又对这一版进行了更新所以上面不一样的主要原因就是因为Eclipse的版本不一致的问题.

Activator.java就是Eclipse老版本的***Plugin.java,后来Eclipse插件机制用OSGi规范重新实现之后,将其更名为Activator.java.

此文件比较重要,它使用的是单例模式.它管理着插件的生命周期.并提供了插件启动和停止的方法.

代码如下:

Activator.java

 1 /**
 2  * The activator class controls the plug-in life cycle
 3  */
 4 public class Activator extends AbstractUIPlugin {
 5     // The plug-in ID
 6     public static final String PLUGIN_ID = "myplugin"; //$NON-NLS-1$
 7     // The shared instance
 8     private static Activator plugin;
 9     /**
10      * The constructor
11      */
12     public Activator() {
13     }
14     public void start(BundleContext context) throws Exception {
15         super.start(context);
16         plugin = this;
17     }
18     public void stop(BundleContext context) throws Exception {
19         plugin = null;
20         super.stop(context);
21     }
22     /**
23      * Returns the shared instance
24      */
25     public static Activator getDefault() {
26         return plugin;
27     }
28     /**
29      * Returns an image descriptor for the image file at the given
30      * plug-in relative path
31      */
32     public static ImageDescriptor getImageDescriptor(String path) {
33         return imageDescriptorFromPlugin(PLUGIN_ID, path);
34     }
35 }

Activator.java 比较重要,今后将会使用到它,而SampleAction.java则是一个类似JFace中的Action,可以把它看做是插件中的Action.

运行时将看到SampleAction.java的效果.

SampleAction.java是IWorkbenchWindowActionDelegate接口的实现类,它类似于JFace中的Action.新打开Eclipse环境里新增的工具栏按钮和主菜单项都是由它实现.当然还要把它在plugin.xml中注册一下才发挥作用.

SampleAction.java

 1 public class SampleAction implements IWorkbenchWindowActionDelegate {
 2     private IWorkbenchWindow window;
 3 
 4     public SampleAction() {
 5     }
 6 
 7     /**
 8      * The action has been activated. The argument of the
 9      * method represents the 'real' action sitting
10      * in the workbench UI.
11      * @see IWorkbenchWindowActionDelegate#run
12      */
13     public void run(IAction action) {
14         MessageDialog.openInformation(
15             window.getShell(),
16             "Myplugin",
17             "Hello, Eclipse world");
18     }
19 
20     public void selectionChanged(IAction action, ISelection selection) {
21     }
22 
23     public void dispose() {
24     }
25 
26     public void init(IWorkbenchWindow window) {
27         this.window = window;
28     }
29 }

项目根目录下还有一个非常重要的文件是plugin.xml.这个文件是插件的入口.Eclipse是根据这个文件里的设置信息来加载插件的.

在开发插件的初期会频繁的在这个文件中做编辑.术语叫做"设置扩展点".像在Eclipse的增加主菜单,视图,按钮等.都是在这个文件里面设置的不同的扩展点,后面将详细讲到如何编辑此文件.

也许你会问:开发一个系统会有很多的菜单和按钮,是不是都要在plugin.xml文件里设置呢?回答:不必.

在plugin.xml里只设置嵌入到Eclipse框架里的主要扩展点.其他软件只有的菜单和按钮就不用再plugin.xml里面设置了.

下图中所示为Eclipse界面中部显示的就是plugin.xml的编辑窗口,点击该窗口下部的plugin.xml选项.可以直接编辑此文件.

和plug.xml相配合一起对插件做配置的还有MANIFEST.MF和build.properties文件.

运行插件"运行---->运行方式----->运行工作平台"这种是专用于插件的运行方式,运行之后将打开一个新的Eclipse环境,并同时将插件项目编译加载到新Eclipse环境中;今后开发经常要通过这种方法来试运行说开发的插件项目,不过那时候选择"运行---->调试----->运行工作平台"更适合调试.Eclipse支持调试期间的部分热修改.不用每次修改都重新启动一个Eclipse.这样能节省很多调试开发时间.

新开的Eclipse界面如图所示.在新的Eclipse环境中新增加了一个工具栏按钮和一个主菜单项.单击此按钮或者菜单项.

将弹出一个"Hello,Eclispe world"信息提示框.按钮和菜单项都是由SampleAction.java产生的效果.

 


推荐阅读
author-avatar
狗子汪_322
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有