1. 概述
eclipse最初是由IBM公司开发的下一代IDE开发环境,现在由eclipse基金会管理。eclipse已经成为最流行的Java IDE。
说起eclipse,就离不开OSGi。自从eclipse3.0开始,其内核被移植到OSGi框架上,OSGi的bundle也成为插件的同意词。可以说,想要深入地了解eclipse插件开发,就必须同时对OSGi的相关内容进行深入了解。
2. eclipse体系结构
eclipse不是一个一整块的程序,而是一个包含插件载入器和数百个插件包围的小内核。每个插件以结构化的方式在整体中发挥作用,可能依赖于其他插件提供的服务,也可能提供其他插件需要的服务。
插件结构
插件的依赖项和服务是在MENIFEST.MF和plugin.xml文件中声明的,在启动时,插件载入器为每一个插件扫描MANIFEST.MF和plugin.xml文件,然后创建一个包含该信息的结构。
工作区
在eclipse IDE中可以显示和修改工作区中的文件。工作区中一个目录层次结构,包含用户文件,项目和源码;也可以包含插件状态信息,首选项等。工作区目录层次结构中的插件状态信息只与该工作区关联,而IDE,插件,静态资源和插件配置文件在多个工作区中共享。
3. eclipse相关内容
eclipse的设计思想是:一切皆为插件。eclipse的核心很小,他的所有功能都是以插件的形式附加于eclipse核心上。
那么eclipse的开发需要了解哪些基本知识?
OSGi
属于eclipse开发的基础,对于简单的应用还可以无视OSGi的存在,对eclipse插件开发越深入就越需要了解这部分内容。
在OSGi环境中,需要了解bundle之间是如何协作,产生依赖的,怎样使用声明式服务或BluePrint对bundle之间的关系进行解耦,如何对OSGi Framework,Bundle,Service进行生命周期管理。
学习OSGi相关内容推荐读这本《OSGi实战》:
SWT/JFace
Sun开发了可移植的,仿真的窗口小部件库,被称为JFC,更普遍的名称是Swing;但Swing应用程序更像是Swing应用程序,而不是平台原生的应用程序。
SWT被设计为占有尽量少的JVM内存,经过一段时期的发展,SWT发现其在RCP中开发应用程序的开发者中受到大量欢迎,它是快速的、原生的、多平台的,它在一个平台尽可能的使用原生窗口小部件,并在没有相应窗口小部件的平台上模拟它们。
虽然SWT提供了原生系统窗口小部件的直接接口,但它被局限于只能使用简单数据类型,主要有字符串,数字和图像,这些都比较简单;但如果处理列表、表、树和文本部件中需要用到的面向对象的数据时,SWT是严重不匹配的,于是便提供了JFace查看器,为SWT提供了面向对象包装器。
GEF
图形编辑框架(Graphical Editing Framework)提供了用于用户信息进行图形表示的一个开发框架,用于创建动态的,交互的图形用户界面元素。GEF框架设计为使用MVC框架,模型保存显示的信息,并在会话之间保存,视图在屏幕上呈现信息,提供基本的用户交互,控制器协同模型和视图的活动。
4. eclipse插件的开发
eclipse插件开发必须建立在PDE环境(plugin develop environment)下,其中会存在对eclipse插件开发的rcp项目以及一些其他附加项目。
eclipse的扩展性
总体而言,eclipse本身就是一个开放的平台,其中的各个部分:菜单,工具栏,视图,透视图,编辑器,右键菜单,按钮,资源,首选项,这些都可以成为eclipse插件开发扩展的目标,这其中所有扩展部分都可能被讲解成单独的一章。
eclipse不仅对外发布了这些扩展点,还允许用户自定义扩展点,让其他人继续在插件上进行扩展。
eclipse插件内容
典型插件结构的文件包括以下内容:
Java类——组成插件的实际Java类,位于插件JAR文件的标准java目录包结构中;
图标等资源——图标、图像等资源一般位于icons或images文件夹下,通过Activator中的方法访问;
META-INF/MANIFEST.MF——描述插件运行时特性的文件;
plugin.xml——描述扩展和扩展点的XML配置文件;
eclipse的可重用性
在eclipse中的RCP项目,你可以使用任何当前eclipse开发环境存在的bundle(还可以额外设置独立的Target Platform最为运行环境),也就是说,eclipse暴露出来的工具类都可以被拿来使用,并且可以拿到源代码。
插件是基于一个或多个作为eclipse一部分的基础插件创建的,被分散成几个组,并更进一步地分离成UI和Core。UI插件包含用户界面的内容或依赖于其他完成该任务的插件,Core类插件可以在没有用户界面的环境中使用。
插件分类 |
含义 |
Core |
普通级别非UI插件组,组成了基本服务,如扩展处理,资源跟踪等 |
SWT |
标准窗口小部件工具集,与底层操作系统紧密关联,但具有与OS无关的API |
JFace |
基于SWT创建的附加UI功能的通用库 |
GEF |
图形编辑框架减轻了Rich Client的开发流程 |
Workbench Core |
提供eclipse ide本身的相关的非UI行为,如项目,项目属性和构建器等 |
Workbench UI |
提供eclipse ide本身相关的UI行为插件,如编辑器,视图,透视图,toolbar等 |
Team |
提供服务的插件组用于集成源码控制系统至IDE中 |
Help |
提供作为eclipse ide一部分的非UI的帮助 |