关于Eclispe插件开发起步(一)
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
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "myplugin"; //$NON-NLS-1$
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*/
public static Activator getDefault() {
return plugin;
}
/**
* Returns an image descriptor for the image file at the given
* plug-in relative path
*/
public static ImageDescriptor getImageDescriptor(String path) {
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
}
Activator.java 比较重要,今后将会使用到它,而SampleAction.java则是一个类似JFace中的Action,可以把它看做是插件中的Action.
运行时将看到SampleAction.java的效果.
SampleAction.java是IWorkbenchWindowActionDelegate接口的实现类,它类似于JFace中的Action.新打开Eclipse环境里新增的工具栏按钮和主菜单项都是由它实现.当然还要把它在plugin.xml中注册一下才发挥作用.
SampleAction.java
public class SampleAction implements IWorkbenchWindowActionDelegate {
private IWorkbenchWindow window;
public SampleAction() {
}
/**
* The action has been activated. The argument of the
* method represents the 'real' action sitting
* in the workbench UI.
* @see IWorkbenchWindowActionDelegate#run
*/
public void run(IAction action) {
MessageDialog.openInformation(
window.getShell(),
"Myplugin",
"Hello, Eclipse world");
}
public void selectionChanged(IAction action, ISelection selection) {
}
public void dispose() {
}
public void init(IWorkbenchWindow window) {
this.window = window;
}
}
项目根目录下还有一个非常重要的文件是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产生的效果.



关于Eclispe插件开发起步(一)的更多相关文章
- 制作镜像文件工具packer
openstack镜像制作要在openstack上创建虚拟机,必然要使用到虚拟机镜像. 对于普通用户,可以使用已经创建好的虚拟机镜像.一般是操作系统官方构建并提供的. 某些用户可以有自己独特的需求,需 ...
- JavaScript学习笔记(四)——jQuery插件开发与发布
jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...
- jira的插件开发流程实践
怎么开头呢,由于自己比较懒,博客一直不怎么弄,以后克己一点,多传点自己遇到的问题和经历上来,供自己以后记忆,也供需要的小伙伴少走点弯路吧 最近公司项目需要竞标一个运维项目,甲方给予了既定的几种比较常用 ...
- [NodeJS] Hello World 起步教程
概述: 做数据,免不了需要展示数据,数据可视化是必须经历的步骤. 本文将提供一个NodeJS的起步教程,是笔者这两天探索的小结. 正文: 1. 为什么使用NodeJS 究竟是以B/S还是C/S的架构 ...
- Vue插件开发入门
相对组件来说,Vue 的插件开发受到的关注要少一点.但是插件的功能是十分强大的,能够完成许多 Vue 框架本身不具备的功能. 大家一般习惯直接调用现成的插件,比如官方推荐的 vue-router.vu ...
- 【原创】记一次Project插件开发
一.开发背景 最近在使用微软的Office Project 2010 进行项目管理,看到排的满满的计划任务,一个个地被执行完毕,还是很有成就感的.其实,不光是在工作中可以使用Project进行项目进度 ...
- JavaScript学习总结(四)——jQuery插件开发与发布
jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...
- [Tool] Open Live Writer插件开发
一 前言 Windows Live Writer(简称 WLW)开源之后变成 Open Live Writer(简称 OLW),原先 WLW 的插件在 OLW 下都不能用了,原因很简单,WLW 插件开 ...
- VS插件开发 - 登录身份验证
[附加] 很多朋友问那个VS背景怎么弄的,我刚刚已经抽时间把制作步骤发出来了: 请参见<VS插件开发 - 个性化VS IDE编辑器,瞬间 高 大 上>. 最近一直在忙着一些事情,一直没有发 ...
随机推荐
- 怎么解决div覆盖内容却没覆盖的问题?
一.在上下结构的div布局中,可能出现div覆盖div,但是内容却没有出现覆盖的现象.看看一个示例 1: <!DOCTYPE html> 2: <html> 3: <he ...
- KMP算法详解 --从july那学的
KMP代码: int KmpSearch(char* s, char* p) { ; ; int sLen = strlen(s); int pLen = strlen(p); while (i &l ...
- 【转载】/etc/passwd & /etc/shadow 详解
转载自:http://blog.csdn.net/snlying/article/details/6130468 1,passwd文件passwd文件存放在/etc目录下.这个文件存放着所有用户帐号的 ...
- ovirt user guide
Contents [hide] 1 Accessing the User Portal 1.1 Logging in to the User Portal 1.2 Logging out of t ...
- CentOS安装Redis Sentinel HA集群
安装了很多次,但是每次安装还要翻以前的配置,故列文备忘.下文依赖于2.x版本搭建主从节点实现基于sentinel机制的简单Redis HA(相对高可用Redis集群,真正高可用还要等3.0之后版本). ...
- ACCESS-delphi向中插入一条记录报错,但ACCESS不会
问题:在DELPHI中向ACCESS中插入一条记录时,提示“插入错误”,但是取出SQL直接放在ACCESS中插入成功?答:原因是插入语句中的字段名是DELPHI的内部标示符.
- [OC Foundation框架 - 19] 练习遇到的Bugs
1.没有权限读取文件夹 The file “Homework2” couldn’t be opened because you don’t have permission to view it. ...
- JavaScript一道面试题求y的值是? z 的值是? s的值是?
原文:http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-04-01/287.html < script type = "text ...
- DONET三层架构开发初步
.NET三层架构开发初步 今天咱们来谈下三层架构.说到三层架构,搞过点程序的可能都知道三层架构的概念.但是对三层的精髓可能不是很了解. 首先说下自己对三层的理解,就是使用三个(多个)项目结合起来开发出 ...
- Yale CAS + .net Client 实现 SSO 的完整版
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...