eclipse概述

作为java开发人员都知道eclipse是一个开源的开发平台,而且本身也是用java语言开发的。其实但就其本身而言不是一个整块的程序,它只是一个框架和一组服务,包含了一个插件载入器、由成百上千的插件组成的小内核。该内核是OSGI规范的一个实现,为各种此插件执行提供环境。每个插件以结构化的方式在整体中发挥作用,可能依赖于由其他插件提供的服务,也可能提供其他插件需要的服务。这种模块化的设计让eclipse自身分解为不同的功能块。这些功能块能更容易地被重用于创建超出原始开发人员视野之外的应用程序。就如不同版本的eclipse分别为特定的功能而设定。eclipse附带了标准的插件集,包括java开发工具JDK,还包括插件开发环境PDE。而PDE组件主要为扩展eclipse插件开发使用。

OSGI
OSGi(开放服务网关协议,Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范,由OSGi Alliance组织制定的一个基于Java语言的规范。该规范和核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。实现了一个优雅、完整和动态的组件模型。应用程序(称为bundle)无需重新引导可以被远程安装、启动、升级和卸载。
OSGI框架一般具备的基础功能:
模块化的动态部署。基于OSGI而构建的系统可以以模块化的方式动态地部署至框架中,从而增加、扩展或改变系统的功能。支持模块化的封装和交互。每个工程(模块)可通过声明Export-Package对外提供访问此工程的类和接口。
模块的动态扩展。基于OSGI提供的面相服务的组件模型的设计方法,以及OSGI实现框架提供的扩展点方法可实现模块的动态扩展。模块化的设计。在OSGI中模块由一个或多个bundle构成,模块之间的交互通过Import-Package、Export-Package以及OSGI Service的方式实现。
动态化的设计。动态化的设计是指系统中所有的模块必须支持动态的插拔和修改,“即插即用,即删即无”。
可扩展的设计。通常使用定义扩展点的方式。按照Eclipse推荐的扩展点插件的标准格式定义bundle中的扩展点,其它要扩展的bundle可通过实现相应的扩展点来扩展该bundle的功能。每个bundle拥有独立的class loader,通过它来完成本bundle类的加载。
稳定、高效的系统。基于OSGI的系统采用的是微核机制,微核机制保证了系统的稳定性,微核机制的系统只要微核是稳定运行的,那么系统就不会崩溃,也就是说基于OSGI的系统不会受到运行在其中的bundle的影响,不会因为bundle的崩溃而导致整个系统的崩溃。

说白了就是所有的东西都是模块化,他们相互独立又可以按照规则选择性依赖,随时用随时启动,用完就停,一个坏了不影响其他的。(有木有觉得有种熟悉感觉,就像现在流行的微服务,eclipse很早都在使用这种设计模式,是不是很牛)

插件生命周期
六个生命周期:INSTALLED, RESOLVED, STARTING, ACTIVE, STOPPING, UNINSTALLED。

installed和unstalled字面都能理解安装和卸载,resolved表示该bundle已经安装成功,依赖也已经计算完毕,具备能称之为一个bundle的全部条件。这个状态下的bundle的类是可以使用也可以被其他bundle使用,就是已经就绪的状态。Bundle开始使用被激活后,Activator的start方法会被触发,然后该bundle的本地的资源就可以被加载了,然后进入starting、active状态,当停止使用进入stopping状态。这些状态中只用active的状态代表了插件时正常启动使用的,其他都代表插件未成功启动。
Eclipse的执行文件eclipse.exe创建快捷方式,然后在快捷方式目标处加上-console,即可看见osgi console后台,或者在eclipse中打开console视图,在视图Open Console列表中找到Host OSGi console打开。这里可以在osgi>标记后输入合适的osgi命令,比如ss,可以显示所有插件及状态。ss m2e可以搜索m2e的插件。

其他常用命令

命令 用途
ss 展示已安装的bundle
install 通过指定url文件安装对应的为bundle
uninstall 卸载指定Id标识的bundle
start 启动指定Id标识的bundle
stop 停止指定Id标识的bundle
update 同步bundle和bundle的加载文件

插件结构
每个插件的行为都位于代码中,然而插件的依赖项和服务都在MANIFEST.MF和plugin.xml文件中声明。这种结构从当需要时的角度简化了插件代码的延迟载入。因此也减少了启动时间和内存占用。
在启动时插件载入器为每个插件扫描MANIFEST.MF和plugin.xml文件,然后创建一个包含该信息的结构。该结构占用少量的内存空间,载入器可以通过他快速的找到所需要的插件。

src:插件的业务代码
icons:插件使用都的图标
META-INF/MANIFEST.MF:描述插件运行特性的文件,定义了插件的各种标识符、版本、依赖项、启动器、提供者等信息
plugin.xml:描述插件扩展点的配置文件
build.properties:定义插件打包信息的配置文件
plugin.properties:插件的配置文件,是可选的,可以将plugin.xml中的参数统一配在该文件中,可以用来做I18N国际化配置。

PDE为三种配置文件提供了特定的编辑器,可以source编码的方式,也可以可视化窗口的方式配置。Overview配置插件的基本信息包括名称,id,版本,jdk等;Dependencies配置所需要的其他插件比如常用的org.eclipse.ui、org.eclipse.core.runtime、org.eclipse.core.resource或者其他插件对外提供的服务包;Runtime中配置对外提供的服务包和运行时classpath(插件的classpath在这里配置不要再项目右键build path中配置)、Extensions和Extension Points配置插件的扩展和扩展点,比如需要做个向导功能,需要添加org.eclipse.ui.newWizards的扩展,需要做个试图的功能窗口需要添加org.eclipse.ui.views的扩展。

插件启动器
如上图MANIFEST.MF中配置的Bundle-Activator就是插件的启动器类,该类需要实现BundleActivator接口,重写start和stop方法。当插件通过start方法被载入或者通过strop方法关闭时,插件载入器将通知启动器。如果覆盖start和stop方法时请谨慎,尽量取少量的操作,页面影响eclipse启动和关闭速度。如果基于UI的插件(需要org.eclipse.ui的插件)的启动器继承BundleActivator的一个实现类AbstractUIPlugin。该类提供了访问窗口所需图片的方法getImageRegistry().get(key)。

public class Activator implements BundleActivator {private static BundleContext context;static BundleContext getContext() {return context;}public void start(BundleContext bundleContext) throws Exception {Activator.context = bundleContext;}public void stop(BundleContext bundleContext) throws Exception {Activator.context = null;}}

由于eclipse时懒加载模式,因此在启动时他可能不会调用start()方法,如果需要在eclipse启动时就载入一些信息,可以通过在插件清单中插入org.eclipse.ui.startup扩展点,实现一个org.eclipse.ui.IStartup的监听器,重写earlyStartup()方法。这样工作台就可以在UI完成启动后调用earlyStartp()方法。

<extension point="org.eclipse.ui.startup"><startup class="com.test.myplugin.StartupListener"/>
</extension>

创建简单的插件工程
通过eclipse的创建工程向导 new->other->plug-in development->plug-in project进入创建流程,填写插件名,一般类似maven的groupId的格式

填写插件基本信息,和启动器

PDE提供了hello world和一些模板供使用,如果对插件的扩展点有初步了解的可以选择第一个custom plugin wizard定制向导

定制向导中勾选需要用到的扩展,比如试图的扩展,向导的扩展,后面的可以直接默认,点击finish一个简单的插件功能就生成好。

插件打包
插件打包的方式有两种,直接打成jar,或者打成zip的安装包。一般作为开发人员更喜欢jar的文件,而且打jar的方式比较简单点,这里介绍这种方式。

右击插件工程 export->Deployable plug-ins and fragments

填写导出的位置,options中可以配置版本号后的时间戳,点击finish。打好的jar包直接拷贝到eclipse的plugins目录中,重启即可。

eclipse插件原理简介相关推荐

  1. Android插件化原理和实践 (一) 之 插件化简介和基本原理简述

    1 插件化简介 Android插件化技术是一种这几年间非常火爆的技术,也是只有在中国才流行起来的技术,这几年间每每开发者大会上几乎都会提起关于插件化技术和相关方向.在国内各大互联网公司无不都有自己的插 ...

  2. Eclipse插件简介

    Eclipse为插件安装提供多种方式,其中在线安装比较可靠.在Eclipse的工具栏中,选择Help → Install New Software-,将要在线安装插件的URL地址复制到work wit ...

  3. Eclipse插件列表

    1.MyEclipse  J2EE开发插件,支持SERVLET/JSP/EJB/数据库操纵等 www.myeclipseide.com   2.Properties Editor  编辑java的属性 ...

  4. 【Android 插件化】插件化简介 ( 组件化与插件化 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  5. 开发 Eclipse 插件

    如何创建.调试和安装插件 在本文中,David Gallardo 向您展示了如何使用 Plug-in Development Environment 的代码生成向导来创建 Eclipse 插件.您将学 ...

  6. 将JAR依赖项添加到Eclipse插件Maven Tycho构建

    开发OPP项目时,一直困扰着我的是使用硬编码Java库依赖项. 我手动下载了所用库的jar ,将其复制到需要它们的插件中的目录中,然后将其添加到MANIFEST.MF文件中. 您可能会问我为什么要这样 ...

  7. Eclipse入门-- Eclipse的使用简介及插件开发

    Eclipse入门--  Eclipse的使用简介及插件开发 内容: 一.Eclipse简介  1.文件存放  2.Eclipse开发环境  3.编译与运行  4.版本管理  5.使用插件 二.开发E ...

  8. [转载]Eclipse开发工具简介

    Eclipse开发工具简介 Eclipse是开放源代码的项目,你可以到www.eclipse.org去 免费下载Eclipse的最新版本,一般Eclipse提供几个下载版本:Release,Stabl ...

  9. 通用mapper快速入门及原理简介

    一,mapper框架介绍 当我们在项目中使用Mybatis的开发者大多会因为繁多的XML映射配置而头痛不已,即使使用注解,大量的SQL语句也是不可避免的,当数据库表结构发生变动时,所有对应的sql和实 ...

最新文章

  1. python32-python32和
  2. 24.volatile关键字的作用、volatile原理、可见性、内存屏障、volatile性能、transient
  3. 花器官身份基因与靶基因间的调控进化情况
  4. 关闭word_记一次毕设消失事件始末,及mac+word文档消失恢复方法汇总
  5. word vba 读出光标所在的列数_word高效技巧:这几个表格操作让工作更快速
  6. c语言win api函数,Win2K下的Api函数的拦截
  7. inputtextarea表单提示文字
  8. [转]网易云音乐Android版使用的开源组件
  9. [渝粤教育] 浙江大学 半导体材料 参考 资料
  10. Android ImageSwitcher 配合Picasso解决内存溢出(OOM)问题
  11. adb命令安装apk
  12. TOP to Down设计简单例子 Creo3.0
  13. office下载哪个版本比较好
  14. 配置安装跟踪服务器Tracker 配置FastDFS存储服务器 Storage
  15. 记一次戴尔灵越7000(7000-7591)的坑爹螺丝设计,中招了保修都没门
  16. 保研夏令营/预推免联系老师邮件模板
  17. 什么是《现代 JavaScript 教程》?
  18. Windows7双系统卸载Ubuntu
  19. UserWarning: Glyph 20809 (\N{CJK UNIFIED IDEOGRAPH-5149}) missing from current font解决方法
  20. 技术创新研究所安全系统研究中心与普渡大学合作开展颠覆性无人驾驶飞行器安全项目

热门文章

  1. 停车场管理系统(四)
  2. 3D游戏编程7--巡逻兵(总结之前所有出现过的设计模式)
  3. web缓存服务器性能比较 nuster vs nginx vs varnish
  4. 发电机频率调整基础知识
  5. 光伏累计装机全国第二 青海光伏全产业链如何炼成?
  6. 深度学习概述教程--Deep Learning Overview
  7. 如何搭建直播app系统开发流程及难点的介绍
  8. AI进阶 | 多重学习资料免费大放送
  9. 【数据结构】二叉搜索树(BST树)的定义、构建、插入、删除及查找操作
  10. 2021-2027全球与中国绝对防水胶带市场现状及未来发展趋势