Eclipse是一个可扩展的平台,它提供了一些核心的服务,使一系列的工具集协作完成软件开发的任务。工具设计师通过将它们的工具包装成可拔插的组件来扩展eclipse的功能。这些可拔插的组件被称为“eclipse插件”,它们遵循eclipse的插件规范。eclipse的基本扩展机制是:通过核心插件来提供的平台,新的插件可以增加处理部件到现有的插件。
尽管ecliipse平台以构建IDE著称,但它是由许多不同开发者开发的一系列的插件共同组成的。
一、eclipse的插件模型
在eclipse中,插件是在eclipse工作平台上的一个能提供某种服务的组件。一个组件就是一个对象,该对象能够在运行前被配置到一个系统中。eclipse的运行时系统就提供了这样的功能,支持组件的激活,并使一些插件集协作来提供一个无缝的开发环境。在一个eclipse实例中,一个插件被一个或一些插件运行时类或插件类所管理。也就是说,插件类提供了配置和管理插件实例的功能。一个插件类必须扩展自org.eclipse.core.runtime.Plugin,该类是一个提供了基本插件管理功能的抽象类。
eclipse安装目录下含plugins文件夹,该处就是插件所在位置。一个插件被一个plugin.xml文件所描述,它告诉eclipse运行时如何激活该插件。
最基本的plugin.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<plugin
name="JUnit Testing Framework"
id="org.junit"
version="3.7"
provider-name="Eclipse.org">
<runtime>
<library name="junit.jar">
<export name="*"/>
</library>
</runtime>
</plugin>
每个插件有一个全局唯一的标识符id,用于标识该插件。
二、插件的配置和激活
插件的安装很简单,只需将插件文件夹拷贝到plugins文件夹内,这样该插件就可以在适当的时候被eclipse运行时系统激活。激活意味着加载它的运行时类并将其实例化。插件类就是在插件激活startup或反激活shutdown时完成一些特殊工作的类。
eclipse包含一个插件管理核心,称为”eclipse平台“或”eclipse运行时“。每次启动时会自动加载一些核心插件。其它非核心插件只有在有需求时,才被激活。
eclipse模型中,一个插件可能和其它插件有下列两种关系:
1.依赖require :该插件的运行需要其它插件的支持。
2.扩展extension:该插件扩展了原插件的功能。
如:
<?xml version="1.0" encoding="UTF-8"?>
<plugin
id="com.bolour.sample.eclipse.demo"
name="Extension Processing Demo"
version="1.0.0">
<runtime>
<library name="demo.jar"/>
</runtime>
<requires>
<import plugin="org.eclipse.ui"/>
</requires>
</plugin>
三、扩展Extension
当一个插件提供给用户使用时,一些UI元素将被加到基本的eclipse工作台。
增加一些处理部件到一个插件的过程称为扩展extension,这个过程并不限于UI元素。
一个扩展由一个扩展器插件extender plug-in定义,该扩展会引起主插件host plug-in在行为上的改变。典型情况是,包括向主插件中增加处理部件(例如,向eclipse工作台上增加新的菜单),自定义新增部件的行为(例如,自定义菜单项的处理句柄)。
简单情况下,扩展的一个单独行为将会增加一个单独的回调对象到该环境中,callback对象是主插件和扩展插件的交流桥梁。callback对象不同于主插件和扩展插件(它们都自动被eclipse平台实例化并管理),它是一个plain-old-java-object,它通过开发者提供的特殊代码来实例化和管理。
扩展的一个单独行为也能够增加多个callback对象到环境中。例如,eclipse允许通过一个单一的扩展增加多个菜单。
然而,从本质上来说,扩展模型并非必须要求扩展器插件提供一个自定义的callback对象。比如说,以下的情况是可能的:主插件所需的行为变化能够完全由某些类提供,这些类在编译时就可以被主插件识别,这样一来,该扩展声明仅仅会引起实例化这些内建的对象。
类似地,扩展模型也不要求主插件直接地将其扩展的各个部分暴露出来。例如,一个扩展仅仅要求在主插件发生某些特定事件时通知扩展器插件,在主插件的UI上无需任何的改变。
一个插件可能容许自己被各种不同的extension所扩展。例如,工作台UI容许它的菜单和编辑器被扩展。不论哪种扩展,extension都必须遵循一系列特殊的配置规范和行为需求。因此,一个可扩展的插件提供了许多不同类型的”空位slot“来让extension插入。这些空位的类型被称为“扩展点extension-point”。
可见,存在两种类型的插件角色:host和extender。通用角色callback对象,以及与每个扩展点对应的特定的callback对象。
Host插件提供扩展点,并充当协调和管理一些extension扩展的角色。在主插件的plugin.xml文件中,扩展点由extension-point XML元素来定义,
<?xml version="1.0" encoding="UTF-8"?>
<plugin
id="org.eclipse.ui"
name="Eclipse UI"
version="2.1.0"
provider-name="Eclipse.org"
class="org.eclipse.ui.internal.UIPlugin">
<extension-point id="actionSets" name="Action Sets"
schema="schema/actionSets.exsd"/>
<!-- Other specifications omitted. -->
</plugin>
Extender角色的插件定义了extension,一般是使自己的某些方面对主插件来说可用,除此之外,使主插件增加一些processing elements到它的环境。一个extension是通过扩展器插件的plug-in.xml文件中的“extension XML元素”来说明的。
<plugin
id="org.eclipse.help.ui"
name="Help System UI"
version="2.1.0"
provider-name="Eclipse.org"
class="org.eclipse.help.ui.internal.WorkbenchHelpPlugin">
<!-- ... -->
<!-- Action Sets -->
<extension
point="org.eclipse.ui.actionSets"> //使用完全限定名来指定待扩展的扩展点
<actionSet
label="Help"
visible="true"
id="org.eclipse.help.internal.ui.HelpActionSet">
<action
label="&Help Contents"
icon="icons/view.gif"
helpContextId="org.eclipse.help.ui.helpContentsMenu"
tooltip="Open Help Contents"
class="org.eclipse.help.ui.internal.HelpContentsAction"
menubarPath="help/helpEnd"
id="org.eclipse.help.internal.ui.HelpAction">
</action>
<!-- ... other actionSet elements -->
<action
label="&Help..."
icon="icons/search_menu.gif"
helpContextId="org.eclipse.help.ui.helpSearchMenu"
class="org.eclipse.help.ui.internal.OpenHelpSearchPageAction"// callback类
menubarPath="org.eclipse.search.menu/dialogGroup"
id="org.eclipse.help.ui.OpenHelpSearchPage">
</action>
</actionSet>
</extension>
<!-- ... -->
</plugin>
一个回调对象是一个plain old java object(not a plug-in),当扩展点约定中定义的特定事件发生并被主插件识别时,该回调对象将被主插件调用。回调对象的界面由主插件提供。一个回调对象的实现一般是对应于特定extension的自定义类,且由扩展器插件提供。因为回调对象的实现引用了回调接口,因此一般来说和主插件放在同一包中,且扩展器插件一般依赖主插件。
每个回调对象(不同extension-point对应的回调对象)充当一个特定的extension角色,它由XML元素的属性描述,
一个主插件设计者创建一个扩展点时,除了在plugin.xml文件中说明扩展点外,还需要在.exsd文件(扩展点规范extension-point schema)中详细定义extension扩展该扩展点的语法。该文件告诉扩展插件的设计者们如何参数化扩展。
分享到:
相关推荐
基于Eclipse的模型框架 它是Eclipse MDA(Model Driven Architecture)的一个重要组成部分 是Eclipse中许多项目的基础 e g GEF EMF可以将模型转换成高效的 正确的 和易于定制的Java代码
Eclipse Modeling Framework (EMF)是Eclipse 的一个基于Java语言的模型构建框架,它通过提供通用 的模型框架和自动代码生成工具,极大地简化了基于结 构化模型的Eclipse插件或者应用程序的开发
Eclipse插件开发中的Java项目模型
全面的分析讲解eclipse中jdt的模型。使用技巧及注意事项
eclipse4 开发 eclipse 4插件开发 e4插件 Eclipse 4 插件开发演示文档 eclipse 模型插件开发
由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。
ER Master是一个用于设计ER模型图的Eclipse插件。提供的功能包括:从数据库导入关系生成ER图,导出设计图,导出DDL数据定义语句等,目前主流数据完整支持。使用方法:下载jar包直接放到eclipse安装目录下plugins...
org.eclipse.uml2.uml:这是Eclipse UML插件的核心库,提供了UML类图的基本元素,如类、接口、关联、活动图等。它还包含了用于创建和编辑UML模型的编辑器。 org.eclipse.uml2.uml.diagram:这个库包含了用于创建和...
了解uML开发应用,对Eclipse插件体系以及插件开发方法进行了研究,并在此基础上开发出了基于Eclipse平台的UML建模插件。该插件实现了用例图以及静态结构图的绘制。其中,静态结构图包含Java类图以及Java接口图,同时...
1.重构Eclipse插件,更好的易用性,支持一键运行等 2.创建项目支持子系统源代码集成 3.创建项目生成新的分层模型,符合领域驱动设计分层 4.DDDLib升级到4.3.6版本,JPA注解标注在字段上 5.权限子系统重构,支持细...
eclipse图形开发必备插件,可以 用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设 计器、UML类图编辑器等等
ModelGoon 是一个 Eclipse插件,能将Eclipse中现有的java类生成类图,可以进行Java 包的依赖分析,基于UML图进行模型设计,以及逆向工程(即从已有源代码生成类图)。
Eclipse的GEF插件,本人Eclipse for J2EE 2019 亲测! GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很多,例如:UML...
iBiz5 Eclipse开发插件,用于快速的检出J2EE R2模板的系统;并且提供代码模型的导航,帮助用户快速定位机器代码及自动生成扩展代码。
ER Master 是一个用于设计ER模型图的Eclipse插件。提供的功能包括:从数据库导入关系生成ER图,导出设计图,导出DDL数据定义语句等。目前完整支持的数据库包括 MySQL、PostgreSQL 和 -Oracle (developing) -DB2 ...
版权所有(c)2012-2015 AT&T知识产权杨设计工作室一个Eclipse插件,用于创建,编辑,可视化和渲染YANG模型。 利用XText,PYANG,GRAPHVIZ和其他基础开源组件。 在这里,您将找到AT&T YANG Design Studio Eclipse...
ER Master 是一个用于设计ER模型图的Eclipse插件。提供的功能包括:从数据库导入关系生成ER图,导出设计图,导出DDL数据定义语句等。目前完整支持的数据库包括 MySQL、PostgreSQL、Oracle (developing)、DB2 ...
它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图等,以作为代码分析或者文档使用)。
MDValidator Eclipse插件,可在MagicDraw模型上基于IncQuery模式进行验证
将 MagicDraw 状态机模型转换为标准 MDT UML 实例的 Eclipse 插件 先决条件 Java 7 Eclipse Modeling 4.2 Juno 或更新版本 文本 2.5.3 EMF IncQuery 0.8 Eclipse 集成 MagicDraw 18.0.1 或更新版本 如何构建 下载...