在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"