写点什么

书评:以样例讲解 Eclipse 4 插件开发

  • 2013-10-11
  • 本文字数:3953 字

    阅读完需:约 13 分钟

在 InfoQ 的 Java 版块中经常贡献内容的 Alex Blewitt 博士最近通过 PACKT 出版社出版了“《以样例讲解Eclipse 4 插件开发》(Eclipse 4 Plug-in Development by Example)”。这本书使用Java 语言,为那些有志于进行Eclipse 插件开发的人员提供了全面的教程。除此之外,本书后面的章节涵盖了构建自动化以及Eclipse 4 模型的详细介绍,对于那些具有更多经验的面向Eclipse 的开发人员来说,这部分内容所提供的资源会更加有用。

在结构方面,这本书包含了step-by-step 的指导以及样例如何运行的详细介绍、众多的选择性问题来帮助你检验理解情况以及为了巩固所学的知识要做什么练习的建议。它写得很好——很清晰和简洁——它以很紧凑的方式涵盖了大量的信息。

在指导你搭建完Eclipse 和Java 环境之后,本书就进入一个传统的“Hello World”,在这里会使用Eclipse 的插件向导来创建样例插件、启动并进行调试。

从这里开始,接下来的四章会关注于UI,开始的时候会有一个使用Eclipse SWT(Standard Widget Toolkit)的样例,然后会使用JFace,JFace 提供了MVC 架构以及更高层次的抽象。JFace 样例讲解了为结构化的数据构建视图,这里会使用基于表格的视图以及基于树的视图,通过菜单和进度管理器与用户进行交互并且会存储首选项信息。

随后的章节对更有经验的开发人员和新手同样有用,首先详细介绍了Eclipse 4 模型。这与Eclipse 3.x 有了重大的差异,现在用户界面通过 Eclipse Modeling Framework 来进行展现。关于 Eclipse 3 和 4 之间的差别,这里有很好地介绍并且详细阐述了开发人员构建插件的不同的方式,这些插件在两个版本的平台中都能够运行。

其他的话题还包括使用 Maven Tycho (它已经成为构建 Eclipse 插件的事实标准)进行自动化构建、使用 JUnit 进行自动化单元测试、使用 SWTBot 进行用户界面测试、将插件组合为特性(feature)以及产生和注册更新站点。

我与 Alex 进行了交流以了解更多信息。

InfoQ:这本书的目标群体是什么人?

尽管本书的标题是“Eclipse 4 Plug-in Development by Example for beginners”并且代码样例和练习都非常详尽,但是我希望这本书对那些已有的 Eclipse 开发人员也能发挥作用。一方面,即便是经验丰富的 Eclipse 开发人员,Eclipse 4 也是很新的,我希望专门介绍 E4 模型的这一章对于探讨这个话题是个很好地起点,并且我也介绍了 Eclipse 4.x 和 Eclipse 3.x 之间的区别。另外,本书还涵盖了最佳实践,如确保 Command 和 Handler 是隐藏的(covered)(以及如何迁移不再推荐使用的 action)。

对于已有的 Eclipse 插件开发人员来说,介绍 Tycho 构建的这一章可能也会比较感兴趣,因为它展示了如何将既有的 PDE 插件迁移到更新的 Tycho 构建中。

InfoQ:是什么促使你写这样一本书?

Eclipse 4 相对来说是一种新的范式并且插件集成到 IDE 的方式也发生了明显的变化。你在网上看到的大多数教程都是基于 Eclipse 3(甚至 Eclipse 2),这样的话你就会看到有些教程会教你以创建 Action 的形式支持菜单项。我希望编写一本绝对紧跟时代的书并且涵盖最新的最佳实践并且会关注人们依然在使用的但是基于旧技术的一些东西(如 Action)。
就个人而言,我一直想写一本书,我有经验的领域包括 Eclipse、OSGi 以及 Git。我曾经与 Packt 合作过,在审阅过他们的 Jenkins 图书之后,曾经给提过这样的建议。随着 Eclipse 4.x 最近成为潮流并且能够与 Eclipse 4.3 进行同步发布,看起来这是一个很理想的机会。

InfoQ:我对文中的调试信息印象深刻——使用单步过滤器(Step Filter)以及条件断点(conditional breakpoint)、探测 SWT 中的资源泄露等等。这是你有意要包含的内容吗?

这本书是为初学者而写的,因此他们对于调试不一定有太多的经验。我不仅想涵盖基础知识,还想提供一些关于调试 Java 和插件程序的更为实用的技术。通常来讲,这些技巧并不是那么显而易见,只能通过一些其他的方式来获取,所以我将这些内容放在书中,希望能够与其他人在这方面分享我的经验。

因为 SWT 使用手动的资源管理方式,编码时很容易就会因为没有释放而导致资源泄露。很多用户遇到过“No more handles”错误并将其归咎为 Eclipse,实际上这是一种公地悲剧(此处对应的原文为 Tragedy of the commons,大致来讲公地悲剧指的是多个个体过度使用某一种共享资源,以致产生资源枯竭,要了解更多信息,可以参见维基百科该地址——译者注);所发生的事情是因为它使用了一个泄露资源的插件,这个插件会不断缓慢地消耗可用资源,最终会导致 Eclipse 运行时逐渐陷入停顿。所以我想要包含调试和探查泄露资源的内容,更为重要的是,如何通过使用某一个资源注册表以便在一开始就避免这些问题。

InfoQ:之前你提到过 Tycho,它是什么,相对于以前 Eclipse 开发人员所做的事情,它的不同是什么?

Tycho 是 Sonatype 所倡导的基于 Maven 的构建系统,其目的在于以一种可重现的方式开发 Eclipse 插件。在编译插件时,Eclipse 会稍微有所不同,因为 OSGi 在 JAR 之间建立了过滤器;所以当 a.jar 依赖于 b.jar 的时候,它不一定能够看到 b.jar 中所有的包。在历史上,Eclipse 一直使用 Ant 作为 PDE 构建的基础——实际上,当你在 IDE 中构建 Eclipse 插件时,它会生成并自动删除一个 build.xml 文件,“build.properties”实际上会直接应用到 Ant 构建之中。

令人遗憾的是,基于 Ant 的构建往往难以调试,并且依赖解析的方式很复杂且难以进行搭建。另外一方面,对于 Java 和其他应用来讲,Maven 都是事实上标准的构建工具,它具有内置的依赖解析和缓存机制,能够在任何的机器上运行标准的构建。

Tycho 是一系列的 Maven 插件,类似于之前基于 Ant 的构建,但是会通过 P2 仓库进行解析并使用 P2 依赖(而不是中央仓库)。插件可以获取和使用 build.properties 来理解 PDE 的文件结构,并调用 Eclipse 的编译器(必要的 OSGi 过滤器已经就绪)来产生一个编译后的插件。要形成一个产品、特性(feature)或仓库会有多个独立的插件,所以可以使用已有 PDE 插件,并且抛弃掉 Ant 构建的复杂性并将其替换为几个相对简单的 Tycho 插件。

最好的一点在于 Eclipse 平台正在转移到全部使用 Tycho 进行构建,将其作为通用构建基础设施(Common Build Infrastructure)的一部分。现在可以检出 Eclipse 平台,然后只执行一条 Maven 命令就能进行构建。再加上,使用 Gerrit(以及将来的 GitHub)来接受开发者的贡献,这会使得 Eclipse 成为更为开放的社区并且将会鼓励更多的开发人员来提供贡献。

InfoQ:在 UI 模型如何工作方面,Eclipse 4.x 与 Eclipse 3.x 有了明显变化。在这本书中,你为开发人员介绍了在目前同时支持 3.x 和 4.x 产品线的方式。我知道这也是 Eclipse 基金会目前在持续做的事情。你能介绍一下当 Luna 出来(按照日程会在 2014 年的夏天)之后,关于这个方面我们会看到些什么?

Eclipse 4.2(Juno)是第一个基于 E4 的产品发布版本,Eclipse 下载页面的标准包也是基于 E4 平台构建的。尽管之前的构建版本对于测试用户来说也是可用的,但是这是第一次大范围的测试,并且出现了较为明显的性能问题需要解决( InfoQ 在之前曾经报道过)。

Eclipse 4.3(Kepler)释放版本在底层 E4 平台的性能方面有了进步,但是其核心的模型主要面向 RCP 开发人员,因为他们需要对外观和应用环境的体验有更细粒度的控制。很多的 Eclipse IDE 插件依然提供与 Eclipse 3.x API 的兼容性,一直到最低依赖于 4.2(在 4.4 版本出来之后,这种情况会更多)版本之时,很可能很多插件依然依赖于 Eclipse 4.x 版本所提供的 Eclipse 3.x 兼容层。

Eclipse 4.x 模型中还有很多方面不匹配 IDE 插件的工作方式;例如,如果你在构建一个插件(而不是应用),一个技巧就是将你的模型在安装的时候与应用模型进行合并(事后要以类似的技巧进行撤销)。在插件完全适用于原生 E4 API 之前,需要一些这样的特性。

我希望 Luna 能成为一些 E4 变化的起点,这样就能基于 E4 模型编写纯粹的 IDE 插件了。我们已经有了反向的兼容层(允许编写 E4 组件并将其置于 Eclipse 3.x API 之中),但它们是可选的下载内容,紧密依赖于 Eclipse 4.x 版本并不能作为标准的进行下载。一旦这部分内容合并到平台中,我期待看到更多的人使用它并推动 API 往前演化。

最后,Luna 也会支持即将到来的 OSGi R6 释放版本,它在底层标准化了运行时的很多方面,Luna Equinox 实现将一些具有十多年历史的处理挂钩(processing hooks)逻辑迁移为更为标准化的 OSGi 运行时。但是,很多这样的事情会对普通的 Eclipse 插件用户隐藏。

InfoQ:最后,对于那些想使用 Eclipse 生态系统提供的所有技术的人,你有什么书或资源可推荐吗?

有一个 Eclipse 基金会的 YouTube 频道,这里有很多的视频样例以及播客(podcast),位于 http://marketplace.eclipse.org 地址的 Eclipse Marketplace 是寻找 Eclipse 插件的所在。如果你想做 E4 开发,这里发布的 E4 工具站点将会为对应的平台选择合适的版本,因为在 Eclipse 主站上去寻找并不容易。最后,学习 Eclipse 和其他平台教程的一个很好站点就是 Lars Vogel 的 http://www.vogella.com 。Lars 是 E4 的主要支持者(以及贡献者 / 提交者),我在编写这本书时所学到的很多东西都受到了他对 E4 平台所做贡献的影响。

Packt 做了一个可自由获取的样章。 Alex 也写了一篇播客文章来介绍编写这本书的体验。

关于作者

Alex Blewitt 博士工作于伦敦的一家投资银行,但依然在抽时间了解 OSGi 与 Eclipse 的新闻。尽管曾经作为 EclipseZone 的编辑和 Eclipse Ambassador 的候选人,但是他的日常角色与 Eclipse 或 Java 毫无关系。除此以外的时间他会用来陪伴自己的家人,并在天气晴好的时候带他们乘飞机旅行。

原文链接: Book Review:“Eclipse 4 Plug-in Development by Example”

2013-10-11 19:464348

评论

发布
暂无评论
发现更多内容

端智能研发核心套件:MNN 工作台深度剖析

阿里巴巴终端技术

深度学习 ios android 移动端 端智能

打造价值交付体系,企业 CIO 如何应对 DevOps 命题?

BoCloud博云

DevOps 云原生

华为云企业级Redis:助力VMALL打造先进特征平台

华为云数据库小助手

GaussDB GaussDB ( for Redis ) 华为云数据库

以“有用”为圆心:重新认识智慧城市的“高手之路”

脑极体

[架构实战营] 模块一作业

张祥

架构实战营

揭秘!探访百度AI反诈第一线

脑极体

硝烟弥漫的安全战场,只等一位超级英雄登场

白洞计划

HarmonyOS Connect伙伴峰会,车载智慧屏S50正式发布

科技汇

喜大普奔!BFE 控制平面正式开源发布!

百度开发者中心

负载均衡 云原生 Go 语言 开源技术

GrowingIO 数据安全实践

GrowingIO技术专栏

隐私保护 数据安全 隐私安全 数据安全法

官方线索|FATE开源社区1024程序员节福利

石云升

1024我在现场 10月月更

我的新下属都怀念老领导,我该把他们全部开除吗?

石云升

职场经验 10月月更

面试了一个34岁的Java大佬,感觉到他背过很多面试题,年薪50w面试基本都能答得上

Java java面试 java架构

数字化转型请从一个清晰的定义开始 | DBT What

王和全

人工智能 大数据 数字化转型 数字化 数字经济

来,肝了这份网络安全学习计划无敌

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 学习安全

EMQ 在2021电力人工智能大会:稳健数据基础设施架构支撑电力数字化发展

EMQ映云科技

人工智能 物联网 电力 mqtt

再谈字节小程序

字节跳动终端技术

小程序 字节跳动 火山引擎

声网发布融合CDN直播等系列新品,拓宽RTE产品边界

ToB行业头条

声网

利用基数排序LSD方法给等长字符串按字典序排序

Regan Yue

算法 10月月更

开源应用中心 | KodBox快捷高效的私有云在线文档管理系统

开源技术

从芯片公司到VR,字节跳动为了元宇宙加码布局

海比研究院

欢庆1024程序员节,开源茁壮成长

Zilliz

创业 开源 程序员 成长

北鲲云如何为企业提供混合云解决方案

北鲲云

面试官:如何防止 Java 源码被反编译?我竟然答不上来。。

Java 编程 程序员 架构 面试

3面蚂蚁,一路过关斩将 成功拿到offer定级P6,大厂面试雀食有点难!

进击的王小二

java面试 大厂面试 阿里巴巴面经总结 java

从区块链到元宇宙 Metaverse

devpoint

区块链 元宇宙 10月月更

【得物技术】时间切片的实践与应用

得物技术

架构 性能优化 大前端 性能 业务

RTE2021 实时互联网大会参会感想

轻口味

1024我在现场 10月月更

自定义View:resolveSizeAndState方法

Changing Lin

10月月更

Android 音视频 - EGL 源码解析以及 C++ 实现

声网

android 音视频 OpenGL ES

024云原生之软件部署策略

穿过生命散发芬芳

云原生 10月月更

书评:以样例讲解Eclipse 4插件开发_Java_Charles Humble_InfoQ精选文章