好的程序员总是对开发环境有着不同寻常的熟悉有的人可能对完整的IDE熟悉它们也是本文的重点还有人可能会emacs或 vi/vim这样的编辑器熟悉但据调查发现开发人员每隔几年就会转移到新的IDE有可能是项目需要或跳槽到了新公司或是自己的偏好发生了转移
许多开发人员在选择新的编程工具时总会犯难为了解开你心中的疑团本文就对流行的Java开发工具做一次全面的横向对比看完本文说不定就不再犯难 了好吧首先请各位选手登台亮相吧它们分别是EclipseJetBrains IntelliJ IDEANetbeans和Oracle JDeveloper这些工具都很优秀对重构语法检查和调试的支持都很好大都能直接从IDE将项目部署到服务器并能进行远程调试单独对比它们 的功能已经没有什么意义了因为它们都支持插件我们更注重的是易用性文档和帮助系统的质量以及插件的数量和质量提到插件就不得不提Eclipse 基金会长期以来它都信奉和推崇插件Eclipse的插件数非常丰富每次发行新版本都会同步推出大量的新插件
Netbeans和 IntelliJ IDEA也有很多的插件但它们更注重用户体验JDeveloper同样易于使用不过插件数量就少一些此外它和Oracle的软件堆栈联系紧密 从商业角度出发更有吸引力但也正因为如此JDeveloper才没有出现较大的插件生态系统
图 总分对比
这些IDE都支持Java开发中用到的通用语言(JSFHTMLCSSXML等)有些还支持JVM脚本语言(如Groovy和JRuby)甚 至是非Java语言(如C/C++PHP)和建模语言(UML)下表显示了这些IDE默认安装支持的主要语言清单
图 支持的开发语言对比
下表显示了所有IDE对Java SE和企业开发以及对Java ME嵌入式和Android移动开发和的支持良好程度(这里不涉及任何第三方辅助增强工具如果要加入第三方的工具Eclipse对Java ME的支持将有所改善)
图 对开发平台支持的对比
在本次评测中我们特别注重易用性和编码能力我们认为它们是决定生产力和用户满意度的主要因素它们和插件一样重要在记分卡上会有所反映我给每个因素设置了不同的权重如果你不同意我的评估结果你可以根据你的看法进行修改并得出你自己的排名
Eclipse
Eclipse是所有Java IDE中最突出的一员其用户量和插件规模都是无人能敌的这一切首先要感谢其创始公司IBMIBM将其开源成立独立的基金会并提供持续的资助其 它厂商和社区也可以为Eclipse做贡献事实证明这个决策是非常英明的Eclipse社区非常活跃并为其贡献了大量优秀的插件
Eclipse厂商独立性的好处很快就有了回报Google公开宣布Eclipse成为Android开发的首选平台曾经Netbeans也成为 Google的热门候选但Oracle最近针对Android中使用的Java虚拟机而起诉Google让Google彻底断了这个想法
最新版本是今年月发布的代号太阳神它加入了很多新的功能稍后我会提及它们Eclipse是自成一格的IDE其界面布局和其它IDE有 着很大的不同其中最重要的一个概念就是透视图根据不同的行为显示的透视图可能不一样这种设计是为了满足丰富的插件使用因此其界面布局有时会发生 很大的变化
在基本的Java开发环境中Eclipse放弃了一些约定它要求用户遵循它的规则例如在创建项目前需要先创建一个 工作区项目是创建在工作区之下的你也可以在工作区下面创建工作集对工作区的依赖意味着项目的迁移是件麻烦事向导提示往往让人犯晕放手去做的 思想在Eclipse中行不通几乎所有事情都需要填写对话框或选择项要么无法区分或不直观
图 Eclipse IDE的Java编码界面
例如在未安装Groovy插件前将一个混合了Groovy和Java的项目导入到Eclipse如果你点击Groovy文件进行编辑对弹出一个 菜单包含四个选项文本编辑器系统编辑器本地编辑器和默认编辑器因为没有提供任何帮助或提示信息在这里就只能靠猜的方法选择了事情还没完如 果你选择系统编辑器Eclipse开始运行脚本而不是打开编辑它总之开发人员需要有丰富的经验才能很好地驾驭好Eclipse不要迷恋向导是真 理
要摸清Eclipse的底细用户得严重依赖于帮助系统这么多年来Eclipse的帮助系统确实进步了不少但仍然有不足之 处此外Eclipse早期版本会虚假报告错误数量不过现在这一现象已基本得到消除虽然每次发布新的版本都会修复一些问题但其核心的编辑功能应该 重写和重新设计
我还要补充一点在Java开发领域Eclipse的设计问题必须要改进了现在它面对的竞争对手一个也不差它的 那些缺点更能说明问题在其它领域如C开发原本就鲜有优秀的IDE因此抱怨的声音也很少Eclipse现在也是Linux下C/C++开发的主要 IDE
尽管存在问题使用Eclipse的插件可以获得无限的扩展性这也是为什么许多插件开发人员力挺Eclipse的原因许多 优秀的Eclipse插件在其它IDE中是找不到的因为这些插件的开发者不愿意移植如着名的任务管理器Mylin你只能在Eclipse中享用它
过去Eclipse插件管理一直被用户诟病因为插件之间的依赖性太强了Eclipse已经意识到问题的严重性并在逐渐解决这些问题今年发布了Eclipse Marketplace一举解决了寻找插件的困难
JetBrains IntelliJ IDEA
JetBrains的IntelliJ有两种版本付费和免费的开源社区版本本文用于比较的是其付费版本社区版只提供了基本的编辑功能 IntelliJ IDEA比其它IDE的速度要快因此吸引了大批忠实用户对于初学者IntelliJ的开发人员经常关注Java社区的一举一动因此他们总能以最快 的速度添加对新的热门产品的支持如IntelliJ是第一个为Groovy和Grails提供强大支持的IDE也是第一个为JavaScript提 供高级支持和调试功能的IDE即使它不是第一个提供支持的也会争取是第二个或是提供更好的支持IntelliJ可与Ant和Maven无缝集成 支持Spring并能够从Java编码跳跃到Adobe Flex和PHP
IntelliJ IDEA凭借其独树一帜的功能赢得了众多用户如几年前它率先推出用于单元测试的结果对比窗口在进行单元测试时可以并排对比预期结果和实际输出这在当时可是非常拉风的功能
即便是如今它的功能也比其它竞争对手更优秀有些功能完全是独一无二的例如它提供的重构工具就比其它IDE强大得多此外它内置的语法检查器不 仅可以揪出明显的语法错误还可以闻出问题那些写得不好但可以正常运行的代码在它灵敏的嗅觉下暴露无遗这样的代码实现包括简单功能复杂化只 有一个为真的条件等IntelliJ还提供了代码覆盖工具它能在IDE中显示测试时哪些代码被执行过了IntelliJ还捆绑了开源的EMMA 产品
图 IntelliJ IDEA有两个并排的编辑器
IntelliJ还有一个很独到的功能那就是高亮显示重复的代码在一个很大的代码库中要找出重复的代码可不是件容易的事情它还提供了一个依赖分析工具可以准确地显示出方法之间的依赖关系
IntelliJ往往会预先考虑到很多需求例如这里提到的所有IDE都有一个相同的弹出式功能当你在编辑器中输入方法的名称时会弹出一个辅助窗 口这个功能也被称为自动完成在IntelliJ中它会借助代码上下文信息猜测你要使用的函数并将其置于列表顶部因此使用箭头键向下滚动的几率就 小多了最不可思议的是它的准确率很高这是一个非常人性化的功能
说了这么多的优点难道IntelliJ就没有缺点了吗当然不 是抱怨最多的就是缺乏良好的文档支持如果遇到问题可能没有人能帮得上忙要弄清楚其高级功能也不容易幸运的是开发商会回答电子邮件提问但要想得 到正确的答案一次只能问一个问题由于开发商在俄罗斯因此还需要忍受时差IntelliJ的第二个问题是启动时间过长虽然在中有所改善但 启动速度仍然缓慢除了这些问题IntelliJ是一个优秀的IDE与其它竞争对手比起来它是一款成功的商业产品
NetBeans
过去年中NetBeans的市场占有率上升很快据位于纽约的BZ市调公司发布的年度Java IDE调查报告显示 NetBeans在受访者中的使用比例是%今年这一数字翻了一番达到了%它是这个期间上升最大的Java IDE在总的普及程度方面NetBeans仅仅次于排名第一的Eclipse
NetBeans取得今天的成绩是和它的前主人 Sun微系统公司悉心关注分不开的当今年早些时候Oracle收购Sun时Java社区对NetBeans的命运非常关注特别是当Oracle宣布 不再继续支持Sun的开源项目时如OpenSolaris和Kenai托管项目关注度更是达到了前所未有的高度
Oracle开发 工具产品管理老大Duncan Mills传达了Oracle的旨意NetBeans将会继续保留他说我们会积极支持JDeveloper和 NetBeansJDeveloper主要用于内部和企业用户特别是那些需要Oracle融合中间件解决方案的用户而NetBeans主要为那些想 开发其它技术的用户提供我们希望他们最终迁移到Oracle解决方案和JDeveloper
NetBeans最突出的优点是它的 易用性轻盈和简洁访问它的下载页面就可以感受到这种氛围例如下载NetBeans时你会看到它提供了多种预配置的版本你只需要选择合适的下载 即可Eclipse也有类似的体贴之处而IntelliJ和JDeveloper只提供了粗暴的下载链接
图 NetBeans编辑器下方是从代码抽取的未完成任务列表
NetBeans支持JRuby和JavaFX这是其它IDE所忽略的当然NetBeans也是支持C/C++和PHP的JRuby最初是由 Sun开发的这也是为什么NetBeans要支持它的缘故JRuby重要开发人员Charles Nutter最近告诉我在语言支持方面NetBeans有不可逾越的优势它也支持桌面脚本语言JavaFXOracle也表示会坚定不移地推动这 项技术的发展但引来的质疑声也很大因为JavaFX在用户中间的反响并不好NetBeans一度停止了对UML图的支持但幸好现在又提供了
NetBeans早在几年前就经过了完全重新设计保留了简单易用的导航它和IntelliJ不一样IntelliJ是在输入时执行语法检 查NetBeans是在后台不断编译Eclipse有一个配置选项也可以提供类似的功能这意味着一旦你完成编码就可以运行代码 了NetBeans也可以在后台为每个项目创建一个Ant生成文件对开发人员来说Ant生成文件是一个非常有用的资源开发人员可以用它精确地控制 IDE的生成过程
NetBeans还附带了一个分析器一个Juint单元测试生成器以及一个国际化字符向导对于企业级开发它 提供了绑定Tomcat或GlassFish Open Server的下载选项为了监控运行的应用程序NetBeans集成了对JMX(Java管理扩展)和Jconsole的支持
NetBeans的插件数量远远少于Eclipse和IntelliJ IDEA的插件数量相当其中好多插件都是从Eclipse平台移植过来的正如我前面提到的许多Eclipse插件开发者现在都不再往其它平台移植 了但如果NetBeans继续以最近年的速度增长也许情况会有所变化就目前而言插件是NetBeans最大的弱项其它方面NetBeans算 得上是最用户友好的IDE了
Oracle JDeveloper Studio g ()
Oracle的JDeveloper Studio和这里比较的其它产品有很大不同那句走自己的路让别人去说吧的名言用来形容它最合适不过了首先它不是免费的源代码不对外开放确切地说它更像是Oracle的内部开发工具
受Oracle的影响JDeveloper在某些方面显得非常狭隘但它也有其独到之处有趣的是Oracle公司其它产品的版本号永远不能超过其核心产品 – 数据库的版本号因此我们经常看到Oracle产品的版本号都很长很长
JDeveloper的安装很简单但最终在系统中注册的产品名称居然是Oracle融合中间件大多数人认为开发工具不属于中间件范畴但 Oracle坚持这样分类估计是想强调其对中间件开发的支持强度例如JDeveloper为ADF(应用程序开发框架)和Java Server Faces(JSF)组件集提供了许多支持也支持TopLink(Oracle从BEA收购取得的持久化层)JDeveloper也提供了大量的 Java EE工具包括一个Weblogic Server的嵌入式版本它可以在IDE内启动和管理
如果从上到下全部使用Oracle软件堆栈中的产品JDeveloper一定不会让你失望例如你可以将ADF中的Oracle JSF组件切换成其它厂家的你还可以做一些所见即所得的UI开发
图 JDeveloper编辑器底部面板用于管理嵌入的Weblogic Server实例
JDeveloper和其它IDE比起来其响应速度较快帮助信息也很全按下帮助组合键屏幕很快弹出相关的帮助信息在这方面它提供的帮助信息 和其它IDE比起来其上下文感应能力更强JDeveloper也内置了分析器可以测量性能和内存消耗它的语法检查器还发现了一向自诩的 IntelliJ IDEA的代码校验工具未能发现的错误功夫不负有心人Oracle在这方面下了大力气效果就是不一样
JDeveloper的弱项是缺乏一个强大的插件生态系统这和Oracle此前忽略该领域的决策息息相关不过现在Oracle已经醒悟了虽然 JDeveloper也有不少插件了但大部分都是公司自己写的几乎看不到第三方贡献的插件我找了很久都没有发现代码覆盖分析插件这是阻碍 JDeveloper发展的一个重大限制
Oracle清楚地表明JDeveloper将继续作为公司的主要开发环境对于那些致力于Oracle软件堆栈开发的组织而言JDeveloper是不二之选
下表对几个流行的Java IDE做了一个概述
Java IDE平台成本总结Eclipse Java Mac OS XWindowsLinux免费Java IDE市场的绝对领导者每年一次重大发布第三方插件非常丰富但Eclipse难学难用简单任务被复杂化JetBrains IntelliJ IDEA JDK 或Mac OS XWindowsLinux$本次评测唯一的商业软件其功能完善易用但文档仍然不够完善NetBeans JDK WindowsMac OS XLinux免费一款优秀的易于使用的完整IDE支持除Java外的许多编程语言其插件没有Eclipse多功能没有IntelliJ IDEA完善Oracle JDeveloper Studio gJDK WindowsMac OS XLinux免费一个稳定的闭源的Java IDE良好的企业级开发支持和Oracle其它产品结合紧密插件数量很少几乎都是官方提供的
其它IDE
为什么有这么多厂商和开源爱好者为Java编写IDE仍然是个迷之前我们曾介绍了款Python开发工具Java IDE领域也毫不示弱但Java已经很成熟了因此现在已经很少出现新的IDE下面这些曾经资深的开发环境都面临退役了
Embarcadero JBuilder目前该产品的最近一个更新版本还是JBuilder 根据Embarcadero公司的发言人表示年从Borland公司买下其IDE产品线后改名为CodeGear了鑒于公司还在 开发其它IDE如Delphi因此可以认为JBuilder已经走到了生命的尽头
Genuitec MyEclipseMyEclipse是一个基于Eclipse捆绑了一组插件的订阅产品前面我们曾提到Eclipse插件的寻找安装和管理都 很繁琐而MyEclipse正是为此而生Genuitec也开发一些自己独有的插件MyEclipse的订阅价格每年从$$不等包括 技术支持费用
IBM Rational Application Developer这个IDE(即着名的RAD)是IBM推出的一系列开发环境中的一部分RAD和它的兄弟们都是基于Eclipse构建的简而言之 就是在Eclipse基础上换了一张皮加入了一些自己的东西如架构师版本提供了UML建模工具商业开发版本支持IBM的GL等如果你在使用 WebSphere这些工具的威力就可以显示出来了但大多数功能和MyEclipse及其他免费的IDE并没有多大区别