前言
本系列文章将专注于Eclipse4 RCP技术,我想很多人都没听过该技术,名字应该都没听过,毕竟多了一个4,其实他并不复杂也不遥远,是人人可用的技术,因为i它与Eclipse本身息息相关。
Eclipse4 RCP教程全网都很缺少,内外网的博客文章以及书籍也都很少很杂,没有很详细的教程,没有一个完整项目的案例,官方也没有给出Eclipse4 RCP的完整案例,仅有部分技术问题公开。所以导致该技术被忽略。
本人为在读研究生,因工作和课题接触到了该技术,作为该项目的最初技术负责人,对该技术做了较广泛和一定深度的调研与实验,认为该技术相比于QT都不逊色,而且是基于Java的,会更方便实现软件功能,所以写此教程,希望看到这系列教程的人可以顺利的使用该技术做出自己想要的软件。
一、Eclipse4 RCP是什么?
1、Eclipse是什么?
在说Eclipse4 RCP之前需要先说一下Eclipse,Eclipse是一个PC端的计算机软件,是支持各种编程语言的开发人员进行软件开发(Web/PC/Eclipse插件)的集成开发环境(IDE),所以他是给各种软件开发者使用的。我想最初的以及近二十年开发经验的Java开发者们没有不知道Eclipse的,因为当时IDEA还没粗来,仅此一个,哈哈哈,当然还有MyEclipse…就不扯那么远了,其实现在依然很多公司在使用Eclipse进行各种软件开发。
Eclipse本身首先是一个桌面端的软件,有的软件使用的QT-这是CPP的UI库(当然不止是UI了),有的使用C#,有的使用MFC,还有的使用SWing,AWT,JavaFX等。一个PC软件总是使用某个UI库开发。
所以Eclipse首先就是一个PC软件,然后是一个IDE。
2、Eclipse是用什么开发的?
既然是一个PC软件,那么Eclipse是用什么开发的呢?远的不提了,从Eclipse 4.0版本之后就是基于SWT/JFace开发的。SWT是一个Java UI库,专用于开发PC软件,他就是Eclipse最基础的UI库,JFace则是对SWT做的进一步封装,提供了更便捷更丰富的UI组件,也提高了开发速度。Eclipse正是基于这两个库开发出来的。
当然Eclipse并不是只有UI那么简单,其实Eclipse的架构内核是OSGI,OSGI是什么大家可以去百度随便一看,不需要过多了解。OSGI其实是一个架构标准,由一系列的Bundle组成,Eclipse官方组织实现了该标准,它的实现叫做Equnoix,Eclipse的架构内核就是Equnoix,而Eclipse将OSGI中的一些概念取了别名以及做了扩展,最重要的概念是插件,扩展,扩展点,当然还有个RCP(Rich Client Platform),无论是做Eclipse 插件开发还是RCP开发都离不开这四个概念。
Eclipse中插件的概念对应于OSGI中的Bundle概念,一个插件或Bundle实际就是一个具有特定目录结构和特定文件的jar包。所以Eclipse本身是由一系列的插件组成的,包括上面提到的SWT/JFace UI库,它整体完全是由插件组成的,每个插件都可以卸载和安装,随插随用。这种可插拔的实现基于扩展和扩展点。扩展允许一个插件根据另一个插件提供的扩展点(更简单点可以叫接口,其实就是把该插件内部的一些对象和接口暴露给其他插件,让他们可以控制该插件内部的运行)对其他插件进行功能扩展,这就是这些插件可以互相作用的基础。
3、Eclipse RCP是什么?
终于到此可以言归正传,Eclipse本身的存在的目标之一是为开发者提供可视化的软件开发,所以会使用一些特定的最小集合的插件(Bundle)来开发出一个最基本的PC软件,而基于这个插件集合开发出的软件就叫做RCP(富客户端平台)软件,我们可以把这个最小插件集合叫做RCP插件集合。所以Eclipse本身就是一个RCP软件,它使用了RCP插件集合开发出来,然后发布给我们这些开发者使用以及允许我们通过扩展去开发出插件来扩充Eclipse的功能。
所以Eclipse RCP就是利用RCP插件集合来开发出自己的软件,有了这个RCP插件集合我们就能从零开发出一个Eclipse了。
那么这就让人很激动了,如果我使用Eclipse内部的那些插件来开发一个自己的Eclipse如何呢?能否实现呢?答案当然是可以的,否则就不用些这篇文章了哈哈=_=。
二、Eclipse4 RCP是什么?
实际上,RCP也分为两种实现,一种是Eclipse3 RCP,这种是完全基于扩展来实现的,与Eclipse第三方插件开发技术所使用的开发方式是一样的。假设你想在Eclipse中添加一个新的视图,用于显示一个统计折线图,那么你就需要使用扩展,需要编辑plugin.xml文件,添加prg.eclipse.ui.views扩展,并添加新视图的定义,同时编写实现类,需要一系列的配置,很繁琐,而且需要对Eclipse本身的视图实现有所了解。当然Eclipse提供了一些工具允许我们容易的找到那些视图的信息。Eclipse3 RCP就需要这种基于扩展的方式,操作扩展始终不够方便,所以Eclipse官方重新设计了底层实现,
Eclipse4 RCP开发不再完全基于扩展,仅有个别的扩展需要实现,而且这些实现不需要我们自己去配置,通过PDE(Eclipse自带的插件开发工具插件)可视化配置那些扩展就会自动的被配置。
那么Eclipse4 RCP与Eclipse3 RCP的本质区别在于什么呢?其实Eclipse4 RCP基于建模的方式来开发我们自己的RCP软件,想要设计UI,通过鼠标操作建模文件就可以添加新的视图,新的透视图,新的窗口,新的菜单,新的快捷键等等,需要什么就创建什么即可。当然这是一种创建静态布局的方式,想要动态创建以上这些,可以调用Eclipse4 RCP提供的内部服务即可,而且API十分简单(当然这是经过我多次实验摸索出来的,否则没有人知道那些东西到底是干什么的=_=‘’)。而且一个视图的功能可以使用所有已安装的插件提供的API,让我们实现功能复用,不知是否有做过编译器开发的读者,Eclipse 有一个专门针对CPP开发的IDE,应该是叫做Eclipse CPP Developer,他的实现就是在原Eclipse中添加了CDT插件,对CDT插件进行功能和UI扩展后导出给用户使用的。如果我们掌握了Eclipse4 RCP技术,那么我们自己就可以从零做一个我们自己的想做成的CPP集成开发环境。
总而言之,基于Eclipse4 RCP建模的方式开发自己的PC软件是十分便捷的,而且我们只需要导出即可将我们的软件导出到本地使用了,从软件整体布局,到每个界面的具体内容,以及后端的功能实现,到最后的程序导出使用,都十分简单快速。