在 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”
评论