一、引言
自从前几年Eclipse加入到Java开发IDE大军中以后,情况对于Java开发者简直发生了戏剧性的变化。SWT与Swing两种工具包各有 自己的优缺点,而且在性能及外观点都没有远远压倒对方的强项,Eclipse以其明显的优势—独特的性能,易于上手和高生产效率—跨入Java IDE行列中。本文旨在对三个主流Java IDE—
NetBeans,
IntelliJ IDEA和
Eclipse— 的常规特征(安装、性能及编辑器,等)进行对比分析,但仍然把重点放在Swing,JSP/Struts,JavaServer Faces(JSF)以及J2EE/EJB 3.0开发等重点领域特征的比较上。在必要的情况下,也对JPA(Java持久性API)支持方面进行适当评价。
在上面三个IDE中,Eclipse是唯一的存在多个发行版本的IDE:从基本发行版本到带有额外开源插件的预包装版本(例如 EasyEclipse),再到开源/商业型的混合版本(例如Genuitec的MyEclipse)。为了对Eclipse的功能提供比较中肯的评论, 我在本文中主要针对其基本发行版本(包括缺省的Eclipse子工程—例如Visual Editor和Web Tools Project)。每当讨论到它所缺乏的功能时,我往往还要提到商业版的MyEclipse所提供的功能。坦率地说,我很难发现还有哪一种商业IDE会以 每年49美元的订阅价格提供如MyEclipse所提供的那种优质的功能。
首先,让我们来讨论NetBeans 5.5。
二、NetBeans 5.5
供应商 | Sun Microsystems |
网站 | [url]www.netbeans.org[/url] |
价格 | 免费/开源 |
分发 | 基本内容+Enterprise Pack+Visual Web Pack |
安装
NetBeans 5.5及其它发行包(例如,带有UML/BPEL/SOA支持的Enterprise Pack和支持JSF开发的Visual Web Pack)既可以ZIP包形式下载也可以以跨平台InstallShield安装程序方式进行安装。在Windows平台上,该安装程序与OS无缝地集成 到一起—包括创建适当的桌面快捷方式以及在“添加/删除程序”面板中添加一个卸载程序。在Linux平台上,它仅被安装到指定的目录下并且在GNOME或 KDE桌面上创建一个启动图标。遗憾的是,它并没有作为一个RPM或一个.deb文件形式发行,也没有提供一个标准数据仓库形式,这允许Linux用户可 以象他们安装任何其它应用程序一样来安装它。
总体特征
在早期版本中,NetBeans基于Swing进行开发,致使表现得缓慢、庞大且界面丑陋,使人使用起来很不愉快。然而,NetBeans开发小组 从版本5.0开始,对整个IDE作了大幅度的调整,并且在NetBeans 5.5中全面结合进JDK 1.6,从而提供了一种无可争辩的优秀的用户体验,特别是运行于Windows平台上时(Linux平台版本仍然存在一些UI小问题,这估计要在 NetBeans 6.0中得到全面纠正。特别是,版本5.5缺乏对于本地GTK外观的支持)。
首先,NetBeans窗口系统的设计相当高级和灵活,开发人员可以非常容易地以配置方式实现停靠、隐藏和切换几乎任何面板/编辑器。我还发现其菜 单布局极具逻辑性而且易于使用,你可以很容易地存取大多数常用功能(例如,维护用户库)。一直以来,其整体稳定性和性能都是相当优秀的。
其次,基本Java编辑器的设计也非常不错,尽管还不算最好(特别是,在代码自动完成方面与其它IDE相比还有些慢),但是完全可以使用。此外,它 的编辑器还提供了一组基本的重构功能(特别是,最常用的重命名/移动特征),尽管在我的测试中,我发现它并不总是上下文感知的—例如,在重命名 Struts工程中的一个行为类相应的包时,struts-config.xml文件中相应的入口就不会更新(但是,在重构JSF支持bean和更新它们 在faces-config.xml中的入口以及J2EE 1.4会话bean和它们在ejb-jar.xml中的入口等许多方面都表现得相当不错)。
Swing开发
NetBeans最值得称道的就是其著名的新开发的Matisse GUI设计器,这个工具基于新的GroupLayout布局管理器(它最初是由NetBeans开发小组自己开发的—在纳入到基本JDK前作为一个扩展开 发)构建。由于采用了基于基线型设计技术(即是,基于一个控件中实际文本的位置自动地对齐控件),所以,创建具有专业外观的UI变得相当容易。事实上,其 强有力的缩放和停靠功能使之成为我所见过的运行于任何平台上任何语言中最棒的UI设计器。
在安装5.5版本之后,我还下载了最新的更新包—该包支持从未来的6.0发行版本逆向移植到当前的5.5版本。其中提供了一些极具生产效率的特征, 例如自动国际化以及使用定制表单/面板(只要在你的工程内至少成功地编译它们一次)的功能。Matisse就是NetBeans团队所具开发水平的一个极 为优秀的例证(图1展示了实战中的Matisse)。
图1:Matisse及其定制的JPanel组件 |
对于Swing开发者来说,使用NetBeans的另外一个优点是,他们能够使用它提供的强有力的RCP(丰富的客户端平台)向导来创建新的复杂的 Swing应用程序。考虑到Eclipse的基于SWT的RCP的流行性,NetBeans开发小组竭尽全力开发出一种相当可行的基于Swing的选择方 案,并且,恕我直言,其效果给人留下极为深刻的印象(尽管对于小型工程开发而言,初始学习时可能要费些劲)。
JSP/Struts开发
此外,NetBeans中还提供了一个很好的JSP编辑器—它提供了我们期望的所有基本特征以及所有的基本向导,并且为我们免除了启动一个新的 Struts工程相关细节设置的麻烦。由于加入了一个嵌入式Tomcat容器,开发以及测试JSP应用软件变得特别容易和迅速。图2展示了 NetBeans web应用程序向导。
图2:NetBeans Web应用程序向导 |
这个NetBeans web应用程序向导能够自动地配置web.xml和struts-config.xml文件,并且能够添加对于Tiles和Validator的支持。此 外,这个向导还能够针对文件struts-config.xml提供一些上下文菜单选项,甚至还包含添加ActionForms,Actions和 Forwards等内容的子向导。但是,它没有提供任何可视化编辑器以便用于展示应用程序中的页面导航,并且也没有针对Tiles和Validators 配置提供任何额外支持。
作为个人观点,我发现5.5版本中对于Struts的支持也相当体面,但是显然还不如Matisse所实现的那样流畅。此外,它也没有提供针对 JSP或HTML页面的可视化编辑器(这对于老手决不是一个问题,但对于更多的初级程序员却是一个良好的特征)。而且,这个版本中也缺乏在JSP编辑器中 对于适当的嵌入式JavaScript的支持,而仅仅提供了一个基本的CSS编辑器(尽管在安装Visual Web Pack后效果会稍好一些)。因此,所有这些方面都需要作进一步改进(图3展示了NetBeans对Struts框架提供支持的一个示例)。
图3:NetBeans对Struts的支持 |
JavaServer Faces开发
NetBeans对JSF的支持非常类似于它对Struts的支持。为此,它提供了一个向导,从而可以得到一个基本的工程框架,其中包括所需要的 库、配置所有要求的文件,甚至在其JSP编辑器中还提供了针对支持bean属性的代码自动完成功能;另外,还提供了一些向导用于简化文件faces- config.xml中的导航规则。此外,NetBeans并没有提供对Apache MyFaces的支持(仅支持JSF RI);因此,你必须手工修改创建的初始工程以便删除JSF RI部分而使用MyFaces。
此外,NetBeans并没有提供任何可视化编辑器来维护faces-config.xml文件。任何事情都是通过原始的XML编辑或两三个基本上 下文菜单向导来实现的。尽管这完全可以工作而且毫无疑问对于老手已经足够了,但是,它几乎无法实现其它IDE对于JSF开发者支持方面所具有的易用性和高 效性。
然而,NetBeans Visual WebPack的确对构建JSF应用程序提供了一种可选方案—通过把Sun Java Studio Creator中的大多数特征直接移植到NetBeans中。这包括一个Matisse风格的web页面GUI构建器,其中提供了大量的JSF控件(最近 作为单独的开源工程Woodstock而存在);这些控件扩展了基本JSF RI集,而且还支持数据绑定(既支持直接的数据库查询,也支持经由JPA/Hibernate的数据库操作)。
虽然存在上面这么多优秀的特征,但Visual Web Pack仍然存在一些不足(导致许多Java公司不愿意选择它),列举如下:
1.缺乏对页面模板的支持(尽管你可以把一个页面保存为一个模板,并且把它用作新模板的一个基模板,但是显然这种改变也无法从根本上简化页面的设计)。不过,对Facelets的支持或对来自于MyFaces的Tiles支持可以在此大派用场了。
2.缺乏对Apache MyFaces的支持(当发布到使用MyFaces RI而不是使用Sun的实现方案—例如JBoss—的应用程序服务器上时,这潜在地会导致一些问题)。
3.对于支持bean的自动生成功能不够灵活(它基本上以一种非常直接的ASP.NET方式模仿了每一个JSF页面中的结构化上下文,从而使之无法与面向会话的支持bean(例如JBoss Seam中所要求的)联用。
2.缺乏对Apache MyFaces的支持(当发布到使用MyFaces RI而不是使用Sun的实现方案—例如JBoss—的应用程序服务器上时,这潜在地会导致一些问题)。
3.对于支持bean的自动生成功能不够灵活(它基本上以一种非常直接的ASP.NET方式模仿了每一个JSF页面中的结构化上下文,从而使之无法与面向会话的支持bean(例如JBoss Seam中所要求的)联用。
【注意】一个伟大的特征是针对Facelets的支持。如今,许多JSF社区都在全力推荐用之作为JSP的完全替代品(特别是,JBoss Seam开发团队在它所有的文档中公开地呼吁这一点)。
尽管NetBeans开发小组声称在下一个发行版本中将尽力克服所有上面这些不足,但我仍认为Visual Web Pack是针对JSF开发的极具有生产效率的工具。
企业开发
NetBeans 5.5是第一个支持JPA和EJB 3.0的IDE,并且对之提供了相当优秀的支持。特别是,带有注解(包括对persistence.xml文件的适当设置,甚至还提供一些基本的连接信 息)的JPA实体类的自动生成功能将会节约你大量的重复编码时间。而且,自动生成的JPA代码是高质量的,可以立即投入使用。
对于纯粹的企业开发方面,NetBeans对J2EE 1.4和Java EE 5提供了全面支持。特别是,对于J2EE 1.4工程,相应的EJB向导能够生成所有要求的代码(包括business/home/remote接口,以及它们各自的代理实现—更不必提绑定ejb -jar.xml配置文件这样简单的事情)。简言之,NetBeans能够自动为你处理J2EE 1.4相关的大多数琐碎工作,而且也为Java EE 5提供良好的支持(是提供这种支持的第一个IDE,尽管IDEA随后也很快提供了相应支持)。
从其消极的一面看,NetBeans仅对把企业应用程序发布到GlassFish/Sun应用程序服务器和JBoss上提供正式支持。尽管如此,其 更新站点也为WebLogic和WebSphere提供了额外的支持插件,但是我还不十分确定是否NetBeans开发小组会正式提供对它们的支持。
另外,免费版本的企业包中还增添了强有力的UML图表特征(包括双向编辑以及与Java代码的同步),而且还提供了BPEL/SOA编辑器。然而,对这些内容的讨论已经超出本文范围。
对NetBeans的建议
说实在的,我确实很喜欢使用NetBeans。它的几近失败的开发团队奋力抗争,终于争得了属于自己的一席一地—而当时几乎每个人都会认为 Eclipse会生吞活剥之,而如今它却在自己的最新发行版本中实现了如此之多令人惊讶的特征(并且在后面的NetBeans 6.0将增添更多的内容)。然而,它只是没有拥有像Eclipse那么庞大的社团支持。不过,当涉及有关对于其它现成框架—例如Google Web Toolkit,JBoss Seam,Jasper Report,Spring,Tapestry,XDoclet,Echo2,Apache MyFaces,等等—的支持方面时,这难免会贬低该产品的声誉。
IBM所做的一件相当明智的事情是,他果断地放弃了对于Eclipse的控制权并创建一个相应的Eclipse基金会,这一举措一下吸引了大量的第 三方开发者。也许如今到了Sun应该放弃它对NetBeans的牢牢控制并且也该创建一个相应的NetBeans基金会的时候了。在这一点上, Eclipse并没有比NetBeans更多的优势(坦率地说,较之于Eclipse,我认为NetBeans看起来更象一个本地Windows应用程序 —暂抛开所有Swing与SWT之争不提的话)。总之,要想成为最优秀的Java IDE,NetBeans还需要大量的资源支持。因此,我认为光靠Sun自己恐怕很难实现这样的野心。
本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/60145
,如需转载请自行联系原作者