【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 实现的开放源码 ...
随机推荐
- Intel平台map
- 不能hadoop-daemon.sh start datanode, 显示 错误: 找不到或无法加载主类 ”-Djava.library.path=.home.hadoop.apps.hadoop-2.6.4.lib”
这两行代码是用来解决一个Hadoop,32位和64位不兼容的警告的,(这个警告可以忽略) 这两行加到mini2~min4后, export HADOOP_COMMON_LIB_NATIVE_DIR=$ ...
- PHP date()获取系统时间不对
使用date_default_timezone_set(”)方法; <?php error_reporting(0); date_default_timezone_set('PRC'); hea ...
- node开发后将本地mysql数据导入到服务器mysql
近期写的一个钉钉企业微应用用到了mysql数据库(用koa写的后台,并用mysql库来连接),现在需要把本地数据库的数据导入到服务器的数据库中. 服务器安装mysql 可以google篇centos的 ...
- Java ClassLoader详解(转载)
Java ClassLoader详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK ...
- C#特性类的使用
特性类的使用过程: 第一步:定义一个特性类,定义一些成员来包含验证时需要的数据:第二步:创建特性类实例:创建一个特性类的实例,里面包含着验证某一个属性或者字段需要的数据.将该实例关联到某个属性上面.第 ...
- Web UI回归测试 -- BackstopJS 入门
BackstopJS是一个测试工具,用于测试ui图和实际项目是否偏差. 话不多说,直接启动一个项目吧测试吧. 1.首先全局安装BackstopJS npm install -g backstopjs ...
- Safair 浏览器cllick事件不生效或者需要双击才生效
针对Safair 浏览器cllick事件不生效或者需要双击才生效的解决方案. 方法一:给元素加上cursor: pointer样式.(不生效) 方法二:ios事件机制不一样,将click事件改为mou ...
- SpringSecurityLDap
ldap,用于用户登录的权限管理, 可参考:http://www.cnblogs.com/icuit/archive/2010/06/10/1755575.html
- Disruptor学习杂记
慎入,有点乱,只是学习记录,disruptor_2.10.4 1.Disruptor对象有一个EventProcessorRepository对象 2.EventProcessorReposito ...