# 基于 Eclipse 应用开发介绍
基于 Eclipse 的应用,叫做 Eclipse RCP(Eclipse Rich Client Platform),用 Eclipse 框架来构建独立的丰富特性的桌面应用。
Eclipse IDE(Integrated Development Environment)可以看作是一种专注于软件开发的特殊的 Eclipse 应用,比如说 JDT 提供了 java 开发的集成环境。
一个 Eclipse 应用由独立的软件组件构成,这里的组件就成为插件(Plug-in),在 OSGI 概念体系也叫做 bundle。因为 Eclipse 框架是一个可扩展的框架,因此插件可以扩展另外的插件。比如,我们可以创建新的插件来创建新的菜单或者工具栏,来扩展 Eclipse 自带的菜单或者工具栏。
# 插件(Plugin)
为了处理模块间的依赖关系,Eclipse 提出扩展(Extension)和扩展点(Extension point)的概念。每一个希望被别的程序模块扩展的模块,都必须声明一系列扩展点,可以将扩展点想象成插座。而希望在这个模块上扩展功能的程序模块,就需要按照扩展点的声明来编写扩展,这个就是扩展,就像是插头。通过将插头插入插座,扩展获得了服务。即扩展点提供服务而扩展使用服务。这叫做声明与实现分离。扩展点和扩展也可以理解成父类和子类的关系。
通过这种机制,Eclipse 平台和其他功能组件插接起来,就成了一个可用的系统。比如平台加 JDT 就成了 Java IDE,平台加 PDT 就成了 PHP IDE。所以,凡是遵循这一机制开发出来的模块,就叫做插件。这是 Eclipse 平台最重要的技术,一切都是插件。看看现如今的 VSCode 也是通过插件迅速赢得巨大的市场。
<!--Extension Point Declaration --> | |
<extension-point | |
id="view" | |
name="org.eclipse.ui.views" | |
schema="schemas/views.exsd" /> |
以上是一个扩展点的声明, name="org.eclipse.ui.views" 就是暴露出一个扩展点。
<!-- Extension Declaration --> | |
<extension | |
point="org.eclipse.ui.views"> | |
<view alloMultiple="false" | |
class="com.mycompany.ui.MyView" | |
id="com.mycompany.ui.MyView" | |
name="MyView" | |
/> |
以上是一个扩展的声明,扩展点和扩展是通过 "org.eclipse.ui.views" 这个名称关联起来的,扩展 point 扩展点,就像插头插进插座。
这也就体现了声明与实现分离,因为后面具体的实现都放在了类 class="com.mycompany.ui.MyView" 里面去实现,尽管在此刻 MyView 还没有诞生。
扩展和扩展点是 Eclipse 插件开发的最早实现,也是 Eclipse 2 就有的技术,通常被称为 Eclipse runtime。但是从 Eclipse 3 开始,除了保留 Eclipse Runtime 的同时,对 OSGI 做了实现,新的框架被称为 Equinox。
# OSGI
OSGI(Open Services Gateway Initiative),开放式服务网关协议,是一套基于 Java 的开放式接口协议。它的思想与 Eclipse 插件的思想有些类似,都是希望将程序分解为小的可重用的组件,并通过组合它们来构成更强大的可执行程序。然而 OSGI 对于 Eclipse 开发者最大的吸引力,还在于它的框架体系实现了在运行时对模块动态添加和删除功能的支持。
# RCP
RCP(Rich Clent Platform)富客户端平台,是帮助开发者创建和部署富客户端的平台。所谓富客户端指的是为用户提供丰富功能体验的客户端程序。通用,一个富客户端具备以下特征:
- 应该是桌面程序而不能是 web 应用程序,即它可以暂时脱离网络运行,还可以访问客户端本地的资源如文件打印机等。
- 界面美观,功能丰富,具备跨平台能力并且与操作系统的图形平台紧密结合,对用户操作响应要好。
- 承担一定程度的数据缓存以及业务逻辑计算功能,减少和服务器端的交互,减轻服务器的负载。
在 Eclipse 平台的初始设计并不包含 RCP 的构想,从 Eclipse 2 开始,有的开发人员开始使用 Eclipse 平台开发别的类型的应用程序。到了 Eclipse 3,Eclipse 平台中和 IDE 关系紧密的插件被剥离出去,剩下的插件集合就被作为 RCP 推出。这里面就包含了新的基于 OSGI 的运行时框架 Equinox,基于 SWT/JFace 的图形模块、Eclipse 平台的 UI 和 Runtime 模块。
RCP 是构建一个基于 Eclipse 平台技术的应用程序所需要的最小集合,但这并不意味只能使用这个最小集合中的插件。开发者可以任意选取其他插件并将其添加到这一集合之中。
# SWT
SWT(Standard Widget Toolkit)标准图形工具箱,是 Eclipse 开发人员自行创作出来的图形技术。与 jdk 中的 AWT 和 SWing 不同。它无论在界面美观度还是在性能上都超越 AWT 和 Swing。跨平台支持是 Java GUI 技术设计的最大难点,AWT 设计理念是不同操作系统中取其交集,即支持每个操作系统都有的控件,导致只能支持最常用的控件和显示风格,AWT 早已经没有多少人用了。后来 Swing 走了另外一条路径,它是除了标准的控件,支持手绘图形界面,不管各种操作系统是否支持,这样一来,在个平台都保持了一致,但是性能方面就不行了,目前只有 Oracle 的 JDeveloper 使用的这个技术,也是使用的非常少。
SWT 实际上是综合了 AWT 和 Swing 的优点,尽量使用目标平台的控件,以达到较快的处理速度。实在是因为目标平台没有的控件,才进行 Swing 手绘控件。
# JFace
JFace 是一套基于 SWT 的工具箱,它将一些常用的界面操作包装了起来,对界面设计进行了更高层次的抽象,使得开发人员可以专注业务逻辑。在 Eclipse 平台中,就广泛使用了 JFace,如 “对话框”,“首选项设置” 和 “创建向导” 等等,提供了实现框架,大大方便了开发者。
此外,他还有两个最吸引人的功能,操作(Action)机制和查看器(Viewer)机制。 - 操作机制是将一系列与界面操作无关的操作如对底层数据的修改,封装成一个操作对象,以进行复用。 - 查看器机制是指对一些复杂工作如表格、树和列表做的包装,使用起来更加便捷,查看器使用了 MVC 模式和数据绑定。
# PDE
PDE(Plugin Development Environment)插件开发环境是 Eclipse 的一个子项目,为开发人员提供一个开发插件的环境,提供了一整套工具来对插件进行: - 开发 - 测试 - 调试 - 构建 - 部署
PDE 基本包括几个模块:
- PDE UI :主要是用来窗口界面各种 wizard 来完成插件的配置,将 POJO 模型转化为插件,和 JDT 集成等大部分插件开发所需的配置和代码。
- PDE BUILD:插件构建并非使用 maven 构建,而是更原始的 Ant,只是这些构建脚本是自动生成的。
- PDE API Tools:
# Workbench
Eclipse 窗口又称为 workbench(工作台),它包含几个部分: - 菜单栏 - 工具栏 - 编辑器 - 视图 - ...
# Perspective
翻译为透视图,指的是工作台中一组视图和编辑器的初始布局。将一组业务功能相关的视图放置在同一个透视图下,方便开发人员专注工作,比如 Java Perspective 就是一个整体的界面适合 Java 开发的透视图。
# View
视图容器,特点就是只能看不能编辑。有自己的菜单和工具栏,通过菜单 Windown->Open View 来打开的,可以单独出现,也可以和其他视图一起出现,通过拖拽方式改变位置。
# Editor
编辑器一般是指与特定文件类型关联的编辑区域,如 Java 语言编辑器。
# 插件清单编辑器
这个文件位于 RCP 项目的根目录下,存放着几个重要的配置文件: - plugin.xml - MANIFEST.MF - build.properties - fragment.e4xmi/application.e4xmi
PDE 提供了管理这些文件的界面:
General Information
- ID 插件标识符 必填
- Version 版本号 必填
- Name 名称 必填
- Provider 供应商 选填
Platform Filter 插件平台过滤器,用于表示插件运行的条件
Activator 激活器,用于控制插件生命周期的 Java 类,仅当启动或关闭插件时执行的操作
Execution Environment 执行环境,指定 JRE 的版本
# Eclipse 的版本号
首先要搞清楚 Eclipse 指的是一个平台, 当我们说 Eclipse 的版本比如 4.16 其实指的是 SDK 的版本,也就是说 Eclipse SDK 的版本号是 4.16,SDK(Software Development Kits),这是最核心的版本。
SDK 的下载网址是 Eclipse SDK download, 最新的 SDK 是 2021-12-24 发布的 4.22. 最早的 SDK 是 2001-12-07 发布的 1.0,可见,Eclipse SDK 存活了 20 年了。
就如同 java 的 JDK 版本一样,当我们说 java 8 的时候,其实就是再说 jdk 的版本是 1.8,同样的,当我们说 eclipse 4 的时候,也是再说我们的 sdk 是 4.
Eclipse SDK 是核心平台,也就是说是一个最小合集,在这个最小合集之上,可以加装很多扩展的插件,也就成了各种 IDE,比如 SDK+JDT 就成了 Eclipse Java IDE,SDK + PDT 就成了 Eclipse PHP IDE 等等,因此就不能再使用 SDK 的版本号,而是新建了一个 Eclipse IDE 版本号系列,是以【年 - 月】的格式来定义的,比如 2021-12 是 Eclipse IDE 最新的版本号,它代表了一批 IDE
# 学习地址
Eclipse RCP (Rich Client Platform) - Tutorial (vogella.com)
protoc -I=./proto/ --java_out=./generated/ --java_grpc_out=./generated/ proto/service.proto
protoc --java_out=./generated/ --java_grpc_out=./generated/ proto/service.proto
protoc -I=D:\Idea\eclipse\java-2023-03\eclip
se\eclipse-workspace\scaTest\src\proto --java_out=D:\Idea\eclipse\java-2023-03\eclipse\eclipse-workspace\scaTest\src
generated --java_grpc_out=D:\Idea\eclipse\java-2023-03\eclipse\eclipse-workspace\scaTest\src
generated D:\Idea\eclipse\java-2023-03\eclipse\eclipse-workspace\scaTest\src\proto*.proto