写点什么

书评:以样例讲解 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:464588

评论

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

【差分隐私】基本原理与入门级应用 | 京东云技术团队

京东科技开发者

京东云 差分隐私算法 企业号 6 月 PK 榜

微服务之负载均衡

Disaster

微服务

浪潮 KaiwuDB x 大数据中心 | 数据驱动政府治理能力快速提升

KaiwuDB

KaiwuDB 大数据中心建设

千万级数据的可视化交互展示:Vue.js 技术解析

xfgg

Vue eCharts 6 月 优质更文活动

架构师日记-从技术角度揭露电商大促备战的奥秘 | 京东云技术团队

京东科技开发者

京东云 企业号 6 月 PK 榜 京东618

想要更好地理解大模型架构?从计算参数量快速入手

Baihai IDP

人工智能 Transformer 大模型 白海科技 企业号 6 月 PK 榜

平台即产品:数字化转型的全新驱动力

SEAL安全

平台工程 平台即产品

深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

汀丶人工智能

人工智能 自然语言处理 深度学习 命名实体识别 6 月 优质更文活动

构建系列之新一代利器Esbuild(上)

江湖修行

cli 构建 esbuild 前端‘’

HummerRisk获中国开源创新大赛优秀奖

HummerCloud

开源 云安全

相约未名湖畔,百度商业AI技术创新大赛携手北大学子共探AI发展

百度Geek说

人工智能 百度 企业号 6 月 PK 榜

分享几款 Mac 上非常好用的的免费软件

搞大屏的小北

数据可视化 数据库工具 截图软件 视屏转 gif 视频号下载

京东购物车分页方案探索和落地 | 京东云技术团队

京东科技开发者

京东云 京东商城 企业号 6 月 PK 榜 6 月 优质更文活动

短视频云端批量混剪实操指南

阿里云CloudImagine

云计算 短视频 视频云 云剪辑

深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)

汀丶人工智能

人工智能 自然语言处理 深度学习 命名实体识别 6 月 优质更文活动

数据分析:电子商务需要关注的重要指标有哪些?

搞大屏的小北

电子商务 销售指标

Java线程池三、调优和性能优化

echoes

Java 线程池

赋能矿山 | KaiwuDB 智慧矿山解决方案

KaiwuDB

解决方案 智慧矿山 KaiwuDB

Amazon CodeWhisperer 编程助手试用总结

Hanson

科兴未来|2023年扬中高层次人才创新创业大赛

科兴未来News

STM32通过ADC1读取光敏电阻的值转换光照强度

DS小龙哥

6 月 优质更文活动

Flink实现高效实时处理百万级数据:实践与优化

xfgg

flink 6 月 优质更文活动

【Netty】「萌新入门」(一)Hello, World!

sidiot

Java 后端 Netty 6 月 优质更文活动

通过技术变革,推动全面预算管理前行

智达方通

全面预算管理

科兴未来|2023”福地句才”海外人才创业大赛

科兴未来News

在 Go 中如何使用 database/sql 来操作数据库

江湖十年

MySQL 后端 Go 语言

KaiwuDB 受邀亮相山东省数字化转型论坛

KaiwuDB

数字化转型 KaiwuDB

“全球金牌课程”8月5-6日 · CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum

敏捷教练 Scrum Master CSM 敏捷项目管理

直播回顾 | 一体化智能可观测平台如何保障电商节大促

博睿数据

可观测性 智能运维 博睿数据 618 电商行业

喜讯 | 华秋电子荣获证券时报年度高成长企业

华秋电子

数据可视化设计四大原则透析

搞大屏的小北

数据可视化 设计要素 大屏设计

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