关于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编辑器,瞬间 高 大 上>. 最近一直在忙着一些事情,一直没有发 ...
随机推荐
- Zabbix探索:Agent配置中Hostname错误引起的Agent.Ping报错
搭好了Zabbix_Server以后,添加了服务器本身和一台Windows的机器做测试,居然有这样的报警. Zabbix agent on zabbix_client is unreachable f ...
- AJAX— 异步传输
AJAX异步传输 AJAX— 异步传输 AJAX浏览器与服务器异步传输数据,通过异步请求大大减少数据信息访问量,通俗:AJAX对局部刷新而不是对整个页面刷新,AJAX使得程序更快,更友好. AJAX处 ...
- Android字符串相关类 - CharSequence
Class Overview CharSequence定义为public interface.该接口用于表示一个有序字符的集合,并在其中定义里了处理字符的方法. 已知的常用间接子类有String, S ...
- Chrome 浏览器跨域和安全访问问题 使用 chrome的命令行标记:disable-web-security 参数联调线上数据
做前端的,用Ajax获取数据,是常有的事情,同域下自然没问题了,如果是不同域获取数据,浏览器就有个同源策略的限制. 如图: Origin * is not allowed by Access-Cont ...
- [Spice-devel] usbredir for Windows Client
Hello, I have been scouring the internet for information on how to do this. I've successfully instal ...
- ClassLoader, JavaAgent, Aspectj Weaving一站式扫盲帖
最近工作里复习的Class Loader基础知识集锦,写下来希望对别人有帮助,而且不止是为了撂倒面试官. 为了尽量简单明了容易背,有些部分写得比较干. 0. 参考资料: 书:<深入了解Java虚 ...
- hdoj 2091 空心三角形
空心三角形 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 简单dp-poj-2231-Moo Volume
题目链接: http://poj.org/problem?id=2231 题目大意: 给n个位置,求所有位置到其他n-1个位置的距离总和. 解题思路: 简单dp. o(n^2)的时间复杂度会超.先对这 ...
- PowerDesigner 12.5 汉化破解完整版
PowerDesigner 12.5 汉化破解完整版 分类: ⑦ 综合 2011-08-09 14:59 2979人阅读 评论(0) 收藏 举报 破解wizardsybasetoolsshell扩展 ...
- .NET/C# 类构造函数中this的用法 (转)
在C#中this用来指代当前对象,用于当成员函数中的形参名跟成员变量名一致时,进行区分. 但this不仅仅只有这一作用,this还可以如下这样用: class class1 { private int ...