Inside Eclipse l Inside Eclipse 1 Eclipse 2

  • Slides: 88
Download presentation
Inside Eclipse l 作者: 王磊

Inside Eclipse l 作者: 王磊

Inside Eclipse 目录 1 Eclipse的演化之路 2 Eclipse的架构设计 3 打造基于Eclipse的开发 具 4 Eclipse开发技巧及FAQ 3/6/2021 2

Inside Eclipse 目录 1 Eclipse的演化之路 2 Eclipse的架构设计 3 打造基于Eclipse的开发 具 4 Eclipse开发技巧及FAQ 3/6/2021 2

Eclipse的演化之路 l Eclipse的历史及版本变化 l Eclipse的架构调整 l OSGi的引入 l RCP和RSP l Eclipse的家庭体系 3/6/2021 3

Eclipse的演化之路 l Eclipse的历史及版本变化 l Eclipse的架构调整 l OSGi的引入 l RCP和RSP l Eclipse的家庭体系 3/6/2021 3

Eclipse的历史 l IBM捐献代码 l 2001年发布Eclipse 1. 0 l 2002年发布Eclipse 2. 0 l 2004年发布Eclipse 3.

Eclipse的历史 l IBM捐献代码 l 2001年发布Eclipse 1. 0 l 2002年发布Eclipse 2. 0 l 2004年发布Eclipse 3. 0 3/6/2021 4

Eclipse 从IDE和Platform l IDE u Netbeans u JBuilder u Idea u Eclipse 1. x,

Eclipse 从IDE和Platform l IDE u Netbeans u JBuilder u Idea u Eclipse 1. x, 2. x l Platform u Eclipse 3. x l Eclipse不再获得Jolt大奖就是因为它不再 是一个IDE,而是一个Platform 3/6/2021 6

对Platform的定义 l 框架(SWT, GEF等) l 开发 具(JDT, CDT, PDE) l 管控和服务(OSGi, Runtime) 3/6/2021 7

对Platform的定义 l 框架(SWT, GEF等) l 开发 具(JDT, CDT, PDE) l 管控和服务(OSGi, Runtime) 3/6/2021 7

Eclipse 2. X的架构 3/6/2021 8

Eclipse 2. X的架构 3/6/2021 8

Eclipse 3. X的架构 3/6/2021 9

Eclipse 3. X的架构 3/6/2021 9

Eclipse 2. x-Eclipse 3. x的演化 l 引入OSGi作为Kernal l 剥离资源,即将Resources插件移出核心 l 基于SWT, Workbench建立RCP框架 l 基于Web

Eclipse 2. x-Eclipse 3. x的演化 l 引入OSGi作为Kernal l 剥离资源,即将Resources插件移出核心 l 基于SWT, Workbench建立RCP框架 l 基于Web Server建立RSP框架 3/6/2021 10

向左走RCP 3/6/2021 11

向左走RCP 3/6/2021 11

NSCA RCP结构图 3/6/2021 12

NSCA RCP结构图 3/6/2021 12

RCP的结构 l OSGi: Bundle管理,特别是动态加载 l Runtime: 基于插件机制提供功能 l SWT: 本地UI控件 l JFace: 以MVC结构来访问SWT l

RCP的结构 l OSGi: Bundle管理,特别是动态加载 l Runtime: 基于插件机制提供功能 l SWT: 本地UI控件 l JFace: 以MVC结构来访问SWT l Workbench: 灵活,通用,方便的UI 作台 l Deploy&Update: JNLP, Update Manager 3/6/2021 13

RCP的特性 l OSGI 服务化,动态化 l Plugin 组件化 l Java 跨平台 l SWT JFace 本地UI

RCP的特性 l OSGI 服务化,动态化 l Plugin 组件化 l Java 跨平台 l SWT JFace 本地UI l PDE 易开发 3/6/2021 14

向右看RSP 3/6/2021 15

向右看RSP 3/6/2021 15

未来 l SWT将支持更多的Render方式,如Adobe 的AIR,Html等, l RAP (Rich Ajax Platform) 就是一个RCP 和RSP统一的例子 3/6/2021 17

未来 l SWT将支持更多的Render方式,如Adobe 的AIR,Html等, l RAP (Rich Ajax Platform) 就是一个RCP 和RSP统一的例子 3/6/2021 17

Eclipse RAP平台演示 3/6/2021 18

Eclipse RAP平台演示 3/6/2021 18

OSGi基于模块和服务的结构 Service Contract Component provides uses 3/6/2021 21

OSGi基于模块和服务的结构 Service Contract Component provides uses 3/6/2021 21

OSGi的结构图 l OSGi Framework Overview u Security Layer u Module Layer u Life Cycle

OSGi的结构图 l OSGi Framework Overview u Security Layer u Module Layer u Life Cycle Layer u Service Layer u Actual Services 3/6/2021 22

Eclipse对MANIFEST. MF的扩展 l Eclipse-Buddy. Policy l Export-Package l x-internal l x-friends l Eclipse-Auto. Start

Eclipse对MANIFEST. MF的扩展 l Eclipse-Buddy. Policy l Export-Package l x-internal l x-friends l Eclipse-Auto. Start 3/6/2021 26

Eclipse Runtime l OSGi R 4的实现Equinox l Plugin Runtime l Extension Point l Extension

Eclipse Runtime l OSGi R 4的实现Equinox l Plugin Runtime l Extension Point l Extension 3/6/2021 27

Platform Runtime org. eclipse. core. runtime l OSGi l plug-in runtime l runtime environment

Platform Runtime org. eclipse. core. runtime l OSGi l plug-in runtime l runtime environment l Jobs 3/6/2021 28

Eclipse家族 l RCP: Rich Client Platform l RSP: Rich Server Platform l RAP: Rich

Eclipse家族 l RCP: Rich Client Platform l RSP: Rich Server Platform l RAP: Rich Ajax Platform l TPTP: Test and Performance Tools Platform 3/6/2021 29

Inside Eclipse 目录 1 Eclipse的演化之路 2 Eclipse的架构设计 3 打造基于Eclipse的开发 具 4 Eclipse开发技巧及FAQ 3/6/2021 30

Inside Eclipse 目录 1 Eclipse的演化之路 2 Eclipse的架构设计 3 打造基于Eclipse的开发 具 4 Eclipse开发技巧及FAQ 3/6/2021 30

Eclipse架构图 3/6/2021 33

Eclipse架构图 3/6/2021 33

OSGi的启动机制 3/6/2021 36

OSGi的启动机制 3/6/2021 36

为什么要有扩展点和扩展 l Plugin-插座: 有输入和输出 l OSGi Bundle: 相当于黑盒 l Extension-Point和Extension将两者进行 结合 3/6/2021 Plugin Bundle

为什么要有扩展点和扩展 l Plugin-插座: 有输入和输出 l OSGi Bundle: 相当于黑盒 l Extension-Point和Extension将两者进行 结合 3/6/2021 Plugin Bundle 38

常见的扩展点 l org. eclipse. ui. views,提供各种视图 l org. eclipse. ui. editors 提供各种文件编辑 器 l

常见的扩展点 l org. eclipse. ui. views,提供各种视图 l org. eclipse. ui. editors 提供各种文件编辑 器 l org. eclipse. ui. new. Wizards 提供新建向导 l org. eclipse. ui. commands 可以声明各种 Action 3/6/2021 40

扩展实现(Extension) l 实现功能 org. eclipse. ui. navigator. viewer l 提供资源 org. eclipse. core. runtime.

扩展实现(Extension) l 实现功能 org. eclipse. ui. navigator. viewer l 提供资源 org. eclipse. core. runtime. content. Types l 改变行为 org. eclipse. core. runtime. adapters 3/6/2021 41

常见的扩展实现 l org. eclipse. ui. navigator. viewer 资源管理器 l org. eclipse. ui. editors Java编辑器

常见的扩展实现 l org. eclipse. ui. navigator. viewer 资源管理器 l org. eclipse. ui. editors Java编辑器 各种可视化设计器 l org. eclipse. debug. core. launchers Debug 3/6/2021 42

Eclipse设计模式--Adapter l 给现有的类型添加行为,如将IFile转成IJava. Element 3/6/2021 43

Eclipse设计模式--Adapter l 给现有的类型添加行为,如将IFile转成IJava. Element 3/6/2021 43

Eclipse设计模式--Adapter l IAdaptable是表示自身有转换能力 l IAdapt. Factory表示支持某种对象的转换 3/6/2021 44

Eclipse设计模式--Adapter l IAdaptable是表示自身有转换能力 l IAdapt. Factory表示支持某种对象的转换 3/6/2021 44

Eclipse设计模式--Adapter 3/6/2021 45

Eclipse设计模式--Adapter 3/6/2021 45

Inside Eclipse 目录 1 Eclipse的演化之路 2 Eclipse的架构设计 3 打造基于Eclipse的开发 具 4 Eclipse开发技巧及FAQ 3/6/2021 48

Inside Eclipse 目录 1 Eclipse的演化之路 2 Eclipse的架构设计 3 打造基于Eclipse的开发 具 4 Eclipse开发技巧及FAQ 3/6/2021 48

分析你的程序类型 l IDE l RCP l RSP 3/6/2021 50

分析你的程序类型 l IDE l RCP l RSP 3/6/2021 50

打造基于Eclipse的开发 具-资源篇 l 资源的分类: Project, Folder, File l 资源改变事件: IResource. Delta l 资源管理器: org.

打造基于Eclipse的开发 具-资源篇 l 资源的分类: Project, Folder, File l 资源改变事件: IResource. Delta l 资源管理器: org. eclipse. ui. navigator. viewer CNF框架 l 资源与模型间的关系 3/6/2021 51

打造基于Eclipse的开发 具-编译篇 <build. Spec> <build. Command> <name>org. eclipse. jdt. core. javabuilder</name> <arguments> </build. Command>

打造基于Eclipse的开发 具-编译篇 <build. Spec> <build. Command> <name>org. eclipse. jdt. core. javabuilder</name> <arguments> </build. Command> <name>org. eclipse. pde. Manifest. Builder</name> <arguments> </build. Command> <name>org. eclipse. pde. Schema. Builder</name> <arguments> </build. Command> </build. Spec> <natures> <nature>org. eclipse. pde. Plugin. Nature</nature> <nature>org. eclipse. jdt. core. javanature</nature> </natures> 3/6/2021 53

打造基于Eclipse的开发 具-UI 3/6/2021 61

打造基于Eclipse的开发 具-UI 3/6/2021 61

打造基于Eclipse的开发 具-调试 l 基于Eclipse的扩展点 org. eclipse. debug. core. launchers l JVMTI l Http通信 3/6/2021

打造基于Eclipse的开发 具-调试 l 基于Eclipse的扩展点 org. eclipse. debug. core. launchers l JVMTI l Http通信 3/6/2021 67

Inside Eclipse 目录 1 Eclipse的演化之路 2 Eclipse的架构设计 3 打造基于Eclipse的开发 具 4 Eclipse开发技巧及FAQ 3/6/2021 75

Inside Eclipse 目录 1 Eclipse的演化之路 2 Eclipse的架构设计 3 打造基于Eclipse的开发 具 4 Eclipse开发技巧及FAQ 3/6/2021 75

规划你的包 l 问题: u 如何定义包的名称以及各个包中放置的内容 l 方案: u 请保持插件名称与顶层包名一致 u 根据功能定义包名 u com. primeton.

规划你的包 l 问题: u 如何定义包的名称以及各个包中放置的内容 l 方案: u 请保持插件名称与顶层包名一致 u 根据功能定义包名 u com. primeton. studio. workflow. core u com. primeton. studio. workflow. ui u com. primeton. studio. workflow. tests u com. primeton. studio. workflow. help 3/6/2021 80

避免类加载失败,方案二 l 方案: u 使用Buddy Classloading boot ext app Java boot classloader Standard Java

避免类加载失败,方案二 l 方案: u 使用Buddy Classloading boot ext app Java boot classloader Standard Java extension classloader Standard Java application classloader parent Standard Parent’s classloader. By default, the Java application classloader dependent All plug-ins that are dependent on the current registered buddy 3/6/2021 plug-in Only plug-ins that have explicitly registered themselves as a 83

Buddy Classloading的例子 l Manifest of com. primeton. studio. host u Eclipse-Buddy. Policy: registered l

Buddy Classloading的例子 l Manifest of com. primeton. studio. host u Eclipse-Buddy. Policy: registered l Manifest of com. primeton. studio. buddy u Eclipse-Register. Buddy: com. primeton. studio. host 3/6/2021 84

3/6/2021 88

3/6/2021 88