`
zhangxiang390
  • 浏览: 216681 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

eclipse 插件模型

阅读更多

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”。

 

 

可见,存在两种类型的插件角色:hostextender。通用角色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插件开发学习笔记.pdf

    Eclipse插件开发学习笔记将带领我们深入了解Eclipse插件开发的方方面面。 首先,我们需要了解Eclipse插件的基础概念。在Eclipse中,插件主要由一系列的扩展点(Extension Points)组成,这些扩展点定义了插件可以...

    eclipse插件开发宝典

    1. **理解插件模型**:Eclipse插件模型基于OSGi(开放服务网关倡议)标准,它定义了插件之间的依赖关系和生命周期管理。 2. **XML元数据**:每个Eclipse插件都有一个名为`plugin.xml`的元数据文件,用于描述插件的...

    Eclipse插件开发学习笔记全篇+源码.rar

    1. 插件体系结构:理解Eclipse的插件模型,如何通过插件来构建可扩展的应用。 2. OSGi框架:Eclipse基于OSGi运行,了解OSGi的概念和它在插件中的作用。 3. PDE(Plugin Development Environment):Eclipse内置的...

    eclipse插件开发指南.pdf

    - Eclipse插件是基于插件模型设计的,允许开发者添加新的功能或修改现有的行为。 - 每个插件都是一个独立的模块,可以动态地加载到Eclipse环境中。 - 插件可以通过定义扩展点来与其他插件交互。 - **2.2 Eclipse...

    Eclipse插件开发(第3版 - 高清).pdf.zip

    《Eclipse插件开发(第3版 - 高清)》是关于Eclipse平台扩展开发的一本经典著作,由[美] Dan Rubel撰写,并由陈沛等人翻译,ISBN为978-7-111-30336-7。这本书深入浅出地介绍了如何利用Java、SWT和JFace技术来构建...

    Eclipse插件开发系列

    - **灵活性**:Eclipse插件模型允许开发者轻松扩展IDE的功能,适应不同应用场景的需求。 - **高效性**:利用Eclipse内置的框架和服务可以大幅提高开发效率。 - **美观性**:通过SWT和JFace可以创建出接近本地操作...

    Eclipse插件开发教程PPT Eclipse插件开发教程PPT

    Eclipse插件开发教程PPT是针对开发者设计的一份详细教学材料,旨在帮助他们了解并掌握如何利用Eclipse平台进行插件开发,从而定制自己的开发环境。以下是基于这个教程的几个关键知识点: 1. **Eclipse插件体系结构*...

    hadoop-eclipse插件各版本合集

    Hadoop-Eclipse插件是Apache Hadoop项目与Eclipse IDE集成的一个重要工具,它使得Hadoop开发者能够在Eclipse环境中直接创建、编辑、调试和管理Hadoop MapReduce作业,极大地提升了开发效率。本合集包含了多个版本的...

    Eclipse插件开发

    每个Eclipse插件都包含一组Java类,这些类实现了Eclipse插件模型中定义的接口和服务。插件通过声明元数据(如plugin.xml文件)来描述它们的功能、依赖关系和其他特性。这些元数据使得Eclipse能够管理和加载插件,...

    Eclipse插件开发 第1篇到第4篇 开发基础 核心技术 高级进阶 综合实例 eclipse 插件安装方法

    Eclipse插件开发是软件开发领域中的一个重要环节,它允许开发者通过扩展Eclipse集成开发环境(IDE)的功能来提升工作效率。本系列涵盖了从基础到高级的全方面教程,旨在帮助开发者掌握Eclipse插件开发的核心技术和实践...

    Eclipse插件开发笔记源码

    Eclipse插件开发是Java开发领域中的一个重要分支,它允许开发者通过扩展Eclipse IDE的功能来创建自定义的工作环境。这份“Eclipse插件开发笔记源码”提供了丰富的学习材料,帮助开发者深入理解并实践Eclipse插件开发...

    Eclipse 插件开发指南

    开发Eclipse插件首先需要理解其插件模型,该模型基于OSGi(Open Service Gateway Initiative)规范,这是一套用于Java平台的动态模块系统标准。Eclipse利用OSGi实现插件之间的松耦合和热插拔特性,使得插件可以独立...

    自定义eclipse插件

    6. **模型-视图-控制器(MVC)模式**:许多Eclipse插件遵循MVC设计模式,将数据模型、用户界面和控制逻辑分离,使代码更易于维护。 7. **透视图和视图**:透视图(Perspective)定义了开发环境的布局,而视图(View...

    Eclipse 插件开发官方示例

    官方示例是学习和掌握Eclipse插件开发的宝贵资源,它们通常包含了丰富的代码片段和详细的注释,旨在帮助初学者理解插件体系结构并实践其实现。 在Eclipse插件开发中,你需要了解以下几个核心概念: 1. **插件...

    《Eclipse 插件开发》源代码

    这个《Eclipse 插件开发》源代码提供了丰富的实践示例,帮助开发者深入理解Eclipse插件的构建过程和技术细节。 在Eclipse插件开发中,首先要了解的是Oxygen(早期版本称为PDE,Plugin Development Environment),...

    eclipse插件开发经验汇总

    eclipse插件开发经验汇总 eclipse插件开发是指在Eclipse平台上开发插件的过程。Eclipse是一种基于Java的开放源代码的集成开发环境(Integrated Development Environment,IDE),其插件机制使得开发者可以轻松地...

    eclipse插件

    Eclipse的核心是其插件模型,该模型基于OSGi框架。每个插件都是一个独立的单元,拥有自己的类加载器,可以提供服务,也可以依赖其他插件的服务。插件通过声明提供的服务和需要的导入来实现功能交互。这种模块化的...

    Eclipse插件开发方法与实战

    本书《Eclipse插件开发方法与实战》深入探讨了如何利用Eclipse平台进行插件开发,为开发者提供了详尽的指导。下面,我们将详细讨论Eclipse插件开发的相关知识点。 1. **Eclipse插件体系结构**: - Eclipse采用插件...

Global site tag (gtag.js) - Google Analytics