Andrew Eisenberg曾是英属哥伦比亚大学的一名PhD开发人员,后来工作于SpringSource团队,并从事Groovy Eclipse工具支持方面的工作。他的主要开发理念是:通过与正确的IDE交互,将更具表达力。
Andy Clement则是SpringSource的高级软件工程师,他做许多与开发工具有关的工作( Groovy,AspectJ、Tasktop以及SpringSource工具套件)。过去的几年里Clement一直在领导AspectJ Eclipse项目。他还在Spring Framework 3 中创建了Spring Expression Language支持并为SpringSource dm Server写了不少代码。
作为Groovy Eclipse v2的开发者,Dzone对两人进行了专访。
Dzone:你们刚刚宣布了Groovy Eclipse v2插件的alpha版本,Groovy / Eclipse社区对Groovy与Eclipse的更好结合期待已久,在这次的发布的版本中,有哪些特性值得他们的期待?
Andrew:对于这个Alpha版本,我们的目标是:在Groovy与所有开发者期待的Java工具的特性中,能够支持基本的编辑-保存-编译-运行周期。尽管如此,这还只是一个alpha版本,虽然它包含最终版本中的大部分主要功能,但仍会有很多新增、性能调试和测试
Andy:我们从AspectJ和它的工具支持学到了很多。这个问题不在于你的语言有多聪明,而在于IDE的功能,如果IDE中没有渐进式编译、代码协助和导航,那么依然影响应用的编写。这个Alpha版本也是支持另一种语言直接进入Eclipse JDT的标志性版本。
Dzone:你是如何进入Eclipse插件开发领域的?
Andrew:早在我做PhD时,我就有了扩展型编辑器的想法。像Groovy这样的语言可以通过使用元程序来扩展语言,当时我就在想能否通过元程序来扩展编辑器。尽管我可以找到一些头绪,然而我还是没能真的找到可用的扩展编辑器,这与JDT的局限性有关。JDT是高度优化和优秀结构的框架,用来构建Java语言的工具,而不是用来扩展或者支持其他JVM语言。
毕业后我就业于SpringSource,刚好解决的是AJDT(AspectJ Development Tools)问题,在此期间我们遭遇到瓶颈,因为将AspectJ模型集成到JDT的Java模型中非常困难,这主要是因为JDT缺乏对新编程元素的支持。***我们在Eclispe上使用AspectJ来让JKT更具扩展性。
不久之后,我被邀请到参与Groovy-Eclipse支持的开发。最初我认为同样的方法可行(即使用AspectJ来让Eclispe更加兼容Groovy),结果发现每种语言都不同而且相应的开发工具也不同。由于JDT要求的扩展类型不符,因而使用AspectJ来支持Groovy不可行。后来我们发现也许存在一种方法将Groovy编辑器与Java编辑器整合起来。
Andy:当时我就职于IBM从事于Java支持CICS主机的支持优化工作,想寻找一个新的工作。我的同事当时从一个会议上回来并告诉我们一个关于新项目的主意,他的名字是Adrian Colyer,现在是SpringSource的CTO,他发现了一种叫做面向Aspect编程(Aspect Oriented Programming)的东西,并试图为这种新语言创建Eclispe工具。渐渐的,我们转向于从编辑器端寻找解决方法,可以让更多兼容Eclispe的开发者在UI端工作。幸亏有了AJDT项目,AspectJ作为一个改良过的Eclipse JDT编辑器,我从中学习到了很多。
最初我试验Groovy插件遇到了麻烦,于是回头查看到底是因为什么,与Jochen Theodorou讨论了架构之后,我意识到这是Eclispe支持的一个很好的方法。有时候我们会花费很多时间来复制一大段Eclipse JDT代码只是为了改变其中的某几行,或者编写许多代码来为AJDT中的某个特性创建支持,比如渐进式编译。通过让Eclispe理解Groovy编辑器,可以实现这些功能。
Dzone:在开发Eclispe插件的过程中有哪些可以分享给开发者呢?
Andrew:为Eclispe开发插件很不容易,有许多东西要学习,而且似乎有数不尽的API要了解。尽管如此,如果你知道如何正确地使用这个平台,那么仍然可以创建强大的应用。
学习Eclispe平台***的方法之一就是阅读它的源代码,这些代码写得很好而且标注也很全。平台本身就是***的客户端,可以让你获悉它的API是如果运行的。
另外一个建议是不要畏惧使用内部API,它们通常是获取一些未公开的服务的唯一方法,从长远来看使用它们可以让你的代码更加优良。
Andy: 当我们开始AJDT项目的时候,发现API的数量果然很惊人,同样我也赞同***的学习方法是阅读一些Eclispe代码,尤其是那些跟你从事项目比较相关的代码。
Dzone:你们是怎样开始Groovy的开发的?
Andrew: 与其说我来自于Groovy,倒不如说我来自Eclispe。对于语言我已经有了好多年的了解,但是直到工作在这个Eclispe插件项目我才找到真正使用语言的机会。这真是一种很棒的语言:Groovy代码像Java代码却又有不同之处,初学者也因此可以很快地了解Groovy,然后渐渐发现它更多的性能包括:脚本、AST转换以及闭包等。
Andy:最初为了学到Groovy,我想做一些Grails上的工作。然而当我开始在Eclispe上从事Grails的时候,这不同于我从事Java开发的经历。我太习惯于一个IDE,于是考虑到我之前的工作经历我想我可以从这里做点文章,只要IDE工作了,我就可以回到Grails。
Dzone:在开发Groovy Eclipse v2插件的过程中***的挑战是什么?
Andrew:回想起来将插件的UI组件移植到新的编辑器是个很恐怖的事情。最初的插件使用一种Java模型的复制品来表现Groovy代码,我必须找出这些部分然后使用一个真正的Java模型取代它。当然这也带来了不少优点:***,可以为Groovy程序组件做Java扫描,由于我移除了原来代码中许多不相干的部分,所以新的代码更简短了。
在开发中,可能我花费时间最多的是创建可以生成升级网址的headless构建脚本,这是一个很枯燥的任务,需要自展新的编辑器来构建自己。直到现在,我仍在花费大量的时间来调试构建脚本以产生***的结果。
在此我也有个建议:如果要为Eclispe构建插件,使用其他平台来编写构建脚本。
Andy: 迄今为止我只接手了一项任务,而且这项任务特别有挑战性:集成两个完全不同的编辑器代码基,同时还要确保渐进式编译功能正常运行。这项任务需要在正式开始工作前做许多编程工作,这非常让人不爽。
***次我使用原型,一直到开始构建Grails的时候发现很多困难,难以继续开发下去,所以我彻底放弃了这个方法,重写代码。幸运的是,除了JDT编辑器,我还可以使用JDT测试插件并且用Groovy支持扩展它们,所以重写代码我使用的是TDD方法。
Dzone:能否透露一下下一个版本的一些情况?
Andrew:你指的是V2的最终版吧?目前而言,主要的特性已经应用到了alpha版本中:渐进式编译、代码浏览、内容辅助(content assist)等。然而其中的某些特性尤其是代码浏览和内容辅助仍处于优化过程中。
除了这些主要的特性,我们还希望能够引进其他编辑器的特性,如快速检错、以及AST转换的编辑器支持、一个功能更加完善的Groovy控制面板,也许还会加入一些Grails支持。
Andy: 从开发编辑器的角度来看,接下来到发布v2最终版的几个月里,主要的工作是细节上的进一步完善。基本上所以的功能已经在alpha版本里了,我们要做的就是确定它们在最终版里可用而且流畅,还要做的工作包括性能提升、存储使用等。
【编辑推荐】