【eclipse插件开发实战】Eclipse插件开发1——eclipse内核结构、扩展点机制
Eclipse插件开发实战1——eclipse内核结构、扩展点机制
一、前言
本系列总体介绍eclipse插件开发基本理论、插件项目结构及开发步骤,最后再给出两个插件开发实例。
总体安排结构如下:
1.介绍eclipse内核结构、扩展点机制;
2.介绍SWT的原理,控件设计及事件响应机制
3.介绍OSGi
4.介绍RCP(Rich Client Platform)——Eclipse富客户端
5.介绍插件项目文件结构
6.介绍插件开发过程及基本步骤
7.介绍插件发布jar包的方式
8.给出两个插件开发实例
二、Eclipse内核结构
Eclipse是一个称作插件加载器的小内核,有上百个插件,eclipse最重要的特征就是它的插件架构,其核心非常小,而由许多功能插件组合而成。在启动时,插件加载器扫描plugin.xml文件,寻找每一个插件,并构建一个包含这些信息的架构。
通常eclilpse富客户端程序(RCP,Rich Client Platform)由应用主程序org.eclipse.core.runtime.application、视窗org.eclipse.ui.perspective和工作台workbenchadvisor组成。其中最基本的,一个RCP程序至少需要org.eclipse.core.runtime和org.eclipse.ui两个插件的支持,其包含在requiredplugins选项中。
下面给出eclipse基本框架结构图:
从图中可以清晰地看到:最底层的OSGi(OpenServices Gateway initiative),是Runtime(OSGi)(OSGi运行时),其作为eclipse插件整体结构的最基干部分,OSGi是在eclipse 3.0才被引入,虽然Eclipse在早期版本中已经开始使用插件架构。一般地讲,OSGi本来跟eclipse不相关,其也不是为了eclipse而存在,其是独立于eclipse的另一种服务机制,最初是一种为嵌入式硬件开发的,使网络上的服务提供者和使用者交互的注册服务。Eclipse使用OSGi来进行插件的管理。
在OSGi之上所有的组件都是以插件方式提供。其中SWT和JFace提供用户接(UI)口API。Eclipse把基本的用户接口作为工作台API(workbench API)提供出来。
从Eclipse平台的角度看,SWT、JFace、工作台的部分就是EclipseRCP(Rich Client Platform)。EclipseRCP是基于Eclipse的富客户端技术,Eclipse不仅是一个开发工具,也可以作为一个通用的应用程序平台。可以说EclipseRCP是Eclipse平台的子集,同时其Eclipse自身也是一EclipseRCP的运用实例。
三、Eclipse扩展点机制(Extension Point)
Eclipse本身就是基于插件机制,插件自身可以对其他插件进行扩展,插件本身定义了“扩展点”,需要为插件添加新功能时就可以利用扩展点。在扩展点基础上可以扩展出插件,而插件又可以有新的扩展点,插件相互连接就是通过扩展点实现的。
扩展功能要按照扩展点(ExtensionPoint)定义的规范进行明确声明,eclipse通过定义扩展点可以进行扩展,每个扩展点都有唯一标识符。在程序执行时,扩展和扩展点的连接才被建立,提供扩展点的插件事先并不知道该扩展点实际被扩展了什么行为。
在plugin.xml文件中主要是由extension元素声明扩展,下面给出plugin.xml文件样例:
<extensionpoint="被使用扩展点的ID">
......
</extension>
Elipse平台提供的扩展点有:增加菜单项、增加视图、增加编辑器等。
RCP应用程序启动的过程中,eclipse会寻找扩展点"org.eclipse.core.runtime.application" 对应的类,然后这个类被加载运行。在这个类中,创建一个Display,创建并运行一个Workbench,通过WorkbenchAdvisor配置这个Workbench,WorkbenchAdvisor又是通过WorkbenchWindowAdvisor来实现界面的显示的,然后在这个类里面实现菜单、工具栏等。
【eclipse插件开发实战】Eclipse插件开发1——eclipse内核结构、扩展点机制的更多相关文章
- 【eclipse插件开发实战】Eclipse插件开发3——OSGi、RCP
Eclipse插件开发实战3--OSGi.RCP 一.OSGi 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环境里的服务 ...
- 【eclipse插件开发实战】Eclipse插件开发2——SWT
Eclipse插件开发实战2--SWT 一.SWT简介 SWT(StandardWidget Toolkit) 标准小窗口工具箱,一开源的GUI编程框架,与AWT/Swing有相似的用处,eclips ...
- 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解
Eclipse插件开发6--eclipse在线翻译插件Translator开发实例详解 在上一篇文章中讲到了一个简单的eclipse插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...
- 【eclipse插件开发实战】 Eclipse插件开发5——时间插件Timer开发实例详解
Eclipse插件开发5--时间插件Timer开发实例详解 这里做的TimeHelper插件设定为在菜单栏.工具栏提供快捷方式,需要在相应地方设置扩展点,最后弹出窗体显示时间. 在上一篇文章里创建好了 ...
- 【eclipse插件开发实战】Eclipse插件开发4——插件JDE、PDE开发方式及plugin.xml配置文件结构
Eclipse插件开发4--插件JDE.PDE开发方式及plugin.xml配置文件结构 开发方式分为:java开发环境JDE开发插件的方式和插件开发环境PDE开发插件方式. 插件通过添加到预定义的扩 ...
- 关于Eclipse中的开源框架EMF(Eclipse Modeling Framework)
Eclipse项目本身可以划分为4个主要的子项目:Equinox,平台,Java开发工具(Java Development Tools,JDT)和插件开发环境(Plug-in Development ...
- 【Maven】Eclipse安装Maven插件后导致Eclipse启动出错
本文纯属复制粘贴:具体请参照原文: Eclipse安装Maven插件后,Eclipse启动问题:Maven Integration for Eclipse JDK Warning. 解决方法: 1. ...
- Eclipse 工作目录被破坏,导致Eclipse 打不开
由于之前一直使用的的是 visual studio 的开发工具,对 java 的 Eclipse 工具比较陌生,在使用 eclipse 的过程中误删了工作目录的部分文件,导致在在下次启动 eclips ...
- eclipse中配置c++开发环境 Eclipse + CDT + MinGW
转自eclipse中配置c++开发环境 Eclipse + CDT + MinGW 基本框架:Eclipse + CDT + MinGW 背景知识: CDT:CDT 是完全用 Java 实现的开放源码 ...
随机推荐
- python--面向对象组合
面向对象的命名空间 类中的方法 类中的静态属性 对象的属性类的组合应用 面向对象的命名空间 class A: country='中国' a=A() a.name='alex' print(a. ...
- iOS移动开发周报-第17期
lhq iOS移动开发周报-第17期 前言 欢迎国内的iOS同行或技术作者向我提交周报线索,线索可以是新闻.教程.开发工具或开源项目,将相关文章的简介和链接在微博上发布并 @唐巧_boy 即可. [摘 ...
- smartUpload注意过程
操作的过程中一定要注意的几个方面: 1.将smartUpload.jar拷贝到tomcat/lib以及项目的lib下面,最好是只多不少! 2.因为上传的文件一般都很大,所以应该 ...
- ubuntu 单网卡双 ip
局域网一套物理网络里有两个 ip 段,单网卡设置多 ip 可实现同时访问两个网段. $ cat /etc/network/interfaces # interfaces(5) file used by ...
- NoSQL的四大类型
1 键值数据库 相关产品:Redis.Riak.SimpleDB.Chordless.Scalaris.Memcached 应用:内容缓存 优点:扩展性好.灵活性好.大量写操作时性能高 缺点:无法存储 ...
- 【BZOJ3252】攻略 DFS序+线段树(模拟费用流)
[BZOJ3252]攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛> ...
- 九度OJ 1107:搬水果 (贪心)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5190 解决:1747 题目描述: 在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆 ...
- Objectvice-C中的super
/** 狗:哈士奇 */ //僵尸 #import <Foundation/Foundation.h> @interface Dog : NSObject - (void) walk; + ...
- Struts使用锚
<a href="exam/ExaminationTrainAction_examTrainDisp#an_${id}"><div id="${id}& ...
- Linux随笔-鸟哥Linux服务器篇学习总结(全)
作者:Danbo 时间:2015-7-17 在runlevel3启动级别下默认启动网络挂载(autofs)机制,我们可以通过命令将其关闭:chkconfig autofs off 或者 /etc/in ...