比较NetBeans 6.0 M10和IntelliJ IDEA 7.0 M1
                 ——IntelliJ IDEA使用手记
                                                                                          原文作者: Ryan de Laplante • Filed
                                                                                          本文作者: Thomas Qi

【译者按】前不久,NetBeans 6.0 M10一发布,就引起广泛关注。在Java IDE市场,除了老牌劲旅Eclipse之外,还有另外一个很受欢迎的产品——IntelliJ IDEA,它的重构特性,备受推崇。最新版本的IntelliJ IDEA 7.0 M1,已于近日发布。
本文作者是一位忠实的NetBeans用户。他从一个IDEA新手的角度,对NetBeans 6.0 M10和IntelliJ IDEA 7.0 M1作了一个较全面的比较。

  最近,我看到很多有关Java IDE IntelliJ IDEA的讨论。我只是听说过一些它好的地方,并且对它与NetBeans 6.0(beta)比较起来,究竟如何?很好奇。
  我反复听到的一些有关IDEA的观点,主要是关于它的代码编辑器、重构能力以及性能的。众所周知,在 重构方面,IDEA领先于其他的IDE工具。所以,关于它的重构能力,我没有过多关注,取而代之的是,把一些我个人认为在NetBeans里很有用以及有待改进的地方与之比较。
  我下载的是IntelliJ IDEA 7.0 M1(dev build)和NetBeans 6.0 M10,使用的是JDK 1.6.0,运行是在Ubuntu Linux 7.04上。这是我第一次尝试IDEA。
  首先使我震惊的是IDEA启动、待用的快速。
  几天后,当我再次使用的时候,这种印象不再那么深刻,因为它好像花费了更多的时间。或许,第一次使用IDEA的时候,Java虚拟机已经载入了,而第二次没有载入?另外,第二次启动的时候,IDEA还检查了那些在第一次使用时创建的项目文件。
  IDEA在启动、可用上花费了15秒,而NetBeans 6.0则花费了30秒。因为我每天只启动一次IDE,所以载入时间对于我来说,不是一个大问题。
  接着,我在IDEA里新建了一个web项目。
  我真的不喜欢那个似乎包含了15个步骤的项目向导,它问我各种各样的问题,例如:源文件放在哪个目录?编译文件放在哪个目录?资源文件放在哪个目录?如此等等。我必须阅读大量文字才能做出决定。我更喜欢NetBeans 6.0的新建项目向导。每个步骤,它不只问我一个问题,并且为我作了大量的默认设置。我喜欢这些默认设置(例如路径)的一致性。
  然而,我认为,IDEA很灵活,足以适应任意的目录结构,这点很强大。当你需要使用在别的IDE工具或者文本编辑器里写的代码的时候,这很有用。NetBeans具有“新建基于现有源代码的Java项目”的功能,我没有去尝试,不知道它有多灵活。
  IDEA具有“导入Eclipse项目”和“导入Jbuilder项目”的功能。NetBeans 6的帮助文件里说可以通过更新中心来添加“导入Eclipse项目”和“导入Jbuilder项目”的功能模块,更新中心已经更名为插件管理器,但是我没有看到这些插件,或许它们会在正式版本中出现?
  在IDEA里新建完一个web项目,我双击web.xml文件。
  接下来看到的,使我震惊,我看到了——原始XML文件!!!我还看到了ejb-jar.xml、sun-web.xml、persistence.xml以及别的部署描述文件,这些竟然都是原始XML文件!
  我不敢相信,IDEA竟然没有NetBeans、Jdeveloper、WebSphere Studio以及别的IDE工具都有的可视化部署描述文件编辑器!一些开发者或许认为编辑这些部署描述文件很简单,尤其还有代码提示。呵呵,那是因为你用的不是IDEA,否则你该发问了:既然有JSF和Struts导航文件的可视化编辑器,那为什么没有别的部署描述文件可视化编辑器呢?
  接下来,我想尝试的是“臭名昭著的”代码编辑器。
  打开web.xml文件,我开始输入一些可用的元素名称,我对代码提示的瞬时响应能力,印象深刻。它只有一个短暂的延迟,代码提示打开,大概只花费了半秒,似乎我的手指还在按住CTRL+SPACE的时候,代码提示就已经打开了。
  接着,我新建了一个Java类文件,用于试验更多代码时的提示情况。我再次被代码提示的快速所震撼!
  我发现,在IDEA里,无论我按住或者单击什么,都会有一个瞬时的响应。非常棒!我以前认为,IDEA用户说Eclipse和NetBeans很慢很慢,显得过于夸张。但是,如果我习惯了IDEA的这种性能,对别的IDE工具,我想我也会说同样的话。然而,我不认为你可以说NetBeans 6不再那么慢了。
  NetBeans 6的一个主要的新特性就是完全重写了代码编辑器。新的代码编辑器使用了JDK 6.0的编译程序API,用于访问抽象语法树(Abstract Syntax Tree)。它反应相当快,对代码编辑器里的每个细微之处都给予及时响应。
  我尝试了NetBeans 6.0的代码提示功能,同样印象深刻。我看到一些IDEA的用户在说NetBeans 6.0还是很慢,但我自己感觉不出来。与NetBeans 5.5相比,NetBeans 6.0的代码编辑器有了显著的改进。
  之前我说过,我将不再谈论重构。我食言了。
  我想谈谈NetBeans 6.0的新的重构引擎——Jackpot。
  Jackpot是一个语言无关的用于重构的API,它除了允许对普通.java源文件(例如XML或者JSF文件)进行重构,还允许对非Java元素进行重构。这使得当前的重构工作更加安全并且易于使用。事实上,Jackpot是一个综合的、用于生成便于理解和维护的代码的框架。你可以把它作为实现这些特征的一个替代或者基础:重构支持、高级搜索和浏览、质量审查、复杂编辑任务的自动化(类似宏命令),等等。
  Jackpot还提供了用于编写重构规则的查询语言。你会发现,NetBeans 6里面的重构规则实际上就是Jackpot脚本。我相信有一天,Sun或者别的社区会创建出匹配IDEA重构能力的Jackpot脚本。
  现在回到IDEA,这是我喜欢的一些其他特性:
    当新建一个JSF项目时,我可以选择Sun的参考实现或者Apache的MyFaces。我通常选择Sun的参考实现,但是需要用到某些应用服务器的时候,你必须使用MyFaces。我认为一些JSF的组件库还是依赖于MyFaces。
    内置了对Spring和Hibernate的支持。我敢打赌,NetBeans默认没有提供这些内置支持,是因为Sun正在推动Java EE。是有几个关于Spring和Hibernate的插件,但是我不确定它们是否好用,我也从没有看到有人在使用或者谈论它们。
    IDEA支持这样一些应用服务器:Tomcat、Geronimo、WebLogic、WebSphere、Jboss、Glassfish/Sun App Server。NetBeans也支持这些,但是使用Geronimo和WebSphere时出现了异常。
    IDEA支持使用目录展开格式来部署web应用。我不认为NetBeans也支持这个。
    IDEA内置了很多代码分析功能,例如,代码度量、测试覆盖、相当于checkstyle和findbugs,等等。NetBeans有一些插件用来实现这样的功能,但是我怀疑在NetBeans 6里它们是否还能正常工作,并且它们不是内置的。
    不好的地方,要想在IDEA里使用性能分析器,你需要再多花500美元。NetBeans则内置了一个强大的性能分析器。
  我看到有开发者抱怨说,包含10000到20000个文件的项目,在NetBeans里运行很慢。我不知道他们使用的是NetBeans 5.5还是6.0?但是在6.0里,性能问题是被最优先考虑的。M10是NetBeans 6的最后一个里程碑版本。目前功能基本完成了,从现在到11月份最终版发布,主要的工作就是修复bug和改进性能。
  我承认,我没有对IDEA做一个详尽的调查,我只是粗略地研究了一下,但是对我关心的热点问题都有所涉及。
为了完全体验IDEA,我需要花费数周的时间来学习它的快捷键、重构特性。喜爱IDEA的人会说,一旦你学会了它,你将不再对别的IDE工具感兴趣。如果我必须使用IDEA来工作,我想这也不错。我虽没有用Java开发过百万个项目,可是使用NetBeans我并没有觉得受到什么限制。NetBeans有我需要的所有功能并且我不觉得它慢。
  我想,我不会马上就换用IDEA——至少在NetBeans 6.0最终版发布之前。
(原文地址:http://www.ryandelaplante.com/rdelaplante/entry/a_comparison_of_netbeans_6)


欢迎大家访问我的个人网站 萌萌的IT人