| |
eclipse作为开发java的ide,从出现到现在已经有几年的时间了,其丰富的特性,操作容易和在提高生产力方面收到了广大开发者的青睐。 当然一提到java ide,人们不禁会提到其他java ide像netbeans,intellij等,那么这些java ide之间到底存在着哪些异同呢?因此在java开发的空间里,对这些主要的ides做一个全面的比较是很有必要的,通过比较我们找出这些主要的ides在四个通常的开发领域:swing, jsp/struts, javaserver faces和 j2ee/ejb 3.0中哪个ide表现的更出色。本文就从这四个通常的开发领域来比较eclipse, netbeans,intellij。
在三个ides中,eclipse是唯一个存在多个版本,从基本的版本到预先打包好的带额外的开源插件(像easyeclipse)和开源/商业结合的(像myeclipse)。
netbeans 5.5: 首先来看netbeans 5.5,netbeans 5.5的基本信息如下表:
vendor: | sun microsystems | website: | www.netbeans.org | price: | free/open source | distribution: | base + enterprise pack + visual web pack |
安装: netbeans 5.5,包括它所带的包(像带有 uml/bpel/soa的enterprise pack和开发jsf的 visual web pack )都既可以作为zip文件的形式来下载也可以跨平台进行安装。在windows平台下,安装以后会与操作系统无缝的集成起来,包括桌面的快捷方式和增加安装/卸载控制面板。在linux平台下,netbeans 5.5仅仅安装在一个指定的目录下并且在gnome或者kde桌面上创建了一个启动的图标,但是,在linux平台下,netbeans 5.5不能以rpm或者一个.deb文件形式打包在一起,也不能提供一个标准的知识库,这些知识库可以使linux用户按照其他的应用来安装netbeans 5.5。
一般特性: 早期的netbeans版本在开发swing上速度非常慢,而且界面很不美观,因此并没有收到众多人士的欢迎,自从5的版本以后,netbeans开发小组已经彻底的改变了这种状况,netbeans 5.5和jdk 1.6的结合为用户提供了更为出色的用户体验,特别在windows平台下(linux仍然有一些ui上的小问题,预计在netbeans 6.0的版本这些问题会得以改善。在5.5的版本中缺少对本地gtk的外观支持。)
在windows系统中,netbeans 使用起来非常的方便,像收缩/隐藏/切换等功能,面板/编辑器等配置起来也非常的容易,另外,netbeans的菜单布局也非常有逻辑,使用起来很方便,大多数的一般功能很容易上手,一直以来,netbeans的稳定性和性能也十分出色。
基本的java编辑器也是相当好的,虽然在代码完成方面与其他ides相比还逊色一些,但是毕竟还是可以使用的,netbeans也提供重构的功能(特别是最常用的重命名/移除特性),在一些测试中,它不总是能够进行上下文感知(context-aware),例如在struts工程中重命名action类所在的包,相应的在struts-config.xml中就不能及时的做到同步更新,但是在重构jsf backing beans和更新在faces-config.xml 中的实体方面表现的很好,同时在同步更新j2ee 1.4 sessions beans和ejb-jar-xml的实体方面表现的也很好。
swing开发: netbeans包括一系列的特性来开发swing应用程序,像根据实际文本的位置来进行自动排列,它的强有力的尺寸恢复功能和固定功能使得ui设计器是任何平台的任何语言都不能比拟的。netbeans 5.5还包括一些新的有助于提高生产力的特性,像自动进行国际化(控制每个窗体/对话框/面板到resourcebundle包括所有的国际化字符串),使用自定义的窗体/面板(只要他们在你的工程中至少编译过一次)。

对swing开发者来说,使用netbeans可以充分的利用netbeans的强有力的rcp(rich client platform)向导来创建新的,成熟的swing应用。
jsp/struts开发: netbeans带有非常好的jsp编辑器,该编辑器包括我们期望的基本的特性,基本的向导和创建一个新的struts工程。内嵌的tomcat同期使得开发和调试jsp应用程序都很容易,下图为netbeans web应用向导:

netbeans web应用向导自动配置web.xml文件和struts-config.xml文件,增加对tiles和validator的支持,另外,netbeans还在struts-config.xml文件中提供了内容菜单选项,用向导的方式来增加actionforms, actions和forwards。提供了非可视化的编辑器来显示在应用程序中的页面导航功能,提供对tiles 和validators配置的完全支持。
netbeans 5.5对struts支持的非常好,但并不像发布文档说的那样完美,非可视化的编辑器可以用来编辑jsp或者html页面,对jsp编辑器缺乏对嵌入的javascript的支持,jsp编辑器也只带有一个基本的css编辑器(当然安装上visual web pack是更好的)。这些都有待于提高。下如为netbeans对struts的支持:

【it168技术文档】 jsf开发: netbeans对jsf的支持就像对struts支持的一样,提供了一个基本的向导来创建一个工程,包括类库,配置所有要求的文件等,甚至在jsp编辑器中提供了对backing beans属性的代码补全功能。同时包括在faces-config.xml文件中对导航规则的向导。 netbeans visual web pack提供了一个交互式的解决方案通过从sun java studio creator直接移植到netbeans的特性来构建jsf应用,这包括用来构建web页面的一个matisse样式的gui构造器,并带有丰富的jsf控件,这些jsf控件扩展了基本的jsf ri集,同时也支持数据绑定(直接依靠数据库查询甚至通过jpa/hibernate)。
尽管visual web pack有一些优点,但是visual web pack也有一些缺点: 1. 缺少对页面模板的支持(虽然可以保存一个页面作为一个模板并且作为一个标准使用,但是模板的变化不是级连的),对facelets的支持或者来自myfaces对tiles的支持在这里将是很有用处的。 2. 缺乏对apache myfaces的支持(存在着潜在的问题,当使用myfaces ri而不是sun的规范像jboss部署到一个应用服务器) 3. 不灵活的backing beans自动产生功能。
另一个主要的特性是支持facelets,在许多jsf社区中,facelets被认为是jsp的替代品,尤其是jboss seam已经开放了它的所有文档。
虽然netbeans一再宣称下一个发布版本的不足,但是对jsf开发来说,visual web pack是最能提高生产力的工具。
企业开发: netbeans 5.5是第一个支持jpa和ejb 3.0的ide,在自动产生jpa实体类和注释(包括persistence.xml文件的正确设置,甚至基本的连接信息)可以节省大量的手工编写代码的时间,自动产生的jpa代码的质量非常高并且可以立即使用,第一次使用matisse开发一个swing应用和通过jpa查询/更新一个数据库所达到的水平是我使用powerbuilder多年达到的水平。 对纯粹的企业开发来讲,netbeans提供了对j2ee 1.4和java ee 5的支持,特别对j2ee 1.4的项目来说,ejb向导产生了所有要求的代码(包括business/home/remote接口),总之, netbeans考虑了与j2ee 1.4相关的冗长的代码,同时提供了对java ee 5的封装。
netbeans对部署到glassfish/sun application server和jboss上的企业应用提供了官方的支持,而且更新站点为weblogic和 websphere提供了额外的插件。
intellij idea 6.0.4 intellij idea 6.0.4的基本信息如下表
vendor: | jetbrains | website: | www.jetbrains.com/idea | price: | $499.00 ($299.00 upgrade | 安装: 在windows下,idea提供了exe形式的安装文件,在linux下,idea的安装是更为简单,包括一个tar.gz文件,解压该文件,手动改变到bin子目录下执行./idea.sh。如果不能正常的执行,可能是因为你没有正确的设置$jdk_home环境变量,设置$jdk_home在.bashrc文件中: jdk_home=/home/jacek/dev/java/jdk/jdk1.6.0_01export jdk_homejava_home=/home/jacek/dev/java/jdk/jdk1.6.0_01export java_home
在linux版本中,jetbrains并没有提供标准的.deb或者rpm文件来进行安装,因此,安装以后没有桌面快捷方式或者创建k menu实体,更糟糕的是,双击bin/idea.sh文件也不能启动(返回的错误是没有设置java_home,虽然已经正确的设置了),所以必须的手动地转到命令行执行./idea.sh以正常启动,这点在三个ides中是最差的。
一般特性: 与netbeans一样,idea提供了灵活的布局,在各种配置中截短/锁定/浮动 面板的功能,但它没有netbeans(windows系统下)那样流畅和可配置。
相对idea杰出的编辑器来讲,这些只是一些小问题,idea的编辑器是非常快的,具有对敏感内容的颜色凸显,提示和弹出建议框的功能,使用idea的时间越长,编程的效率就会越高。下图为一个简单的idea编辑器和高级的颜色/语法突出显示:
点击查看大图
【it168技术文档】 jsp/struts开发: idea可以自动的建立配置文件(包括tiles 和validator),下载所有需要的struts类库,它也提供了一个struts助手,提供图形化的编辑器和向导来进行struts配置,包括tiles-config.xml 和validation.xml文件。
idea没有jsp/html页面的可视化编辑器,其规则的idea jsp/html编辑器即使没有一个可视化的组件也是非常好看的,支持嵌入的javascript,特别是能够处理dhtml或者ajax代码,javascript编辑器也支持指定的浏览器(ie, mozilla和 opera)和流行的ajax矿见像dojo, bindows和 prototype。
点击查看大图 idea struts web应用的建立

idea struts助手 idea对web 2.0开发的支持也是很酷的,比如它将支持gwt (google web toolkit)作为它的一个核心特性。
jsf开发: 可以选择jsf版本(1.0,1.1,1.2)和实现(jsf ri或者apache myfaces),idea可以下载需要的类库,jsf模块提供了对jboss seam封装的支持,这说明intellij在jsf开发上正逐渐成为标准框架,也进一步证明了intellij在java web开发中会有更好的表现。
点击查看大图 idea jsf新web应用的建立
点击查看大图 idea jsf配置
企业开发: idea提供了对j2ee规范的完全支持,更重要的是它提供了对ejb3.0和jpa的支持,虽然并没有像netbeans那样支持的好(自动的在持久化单元中为jpa增加实体并在所有的实体域中为指定的查询产生代码,使用netbeans 5.5习惯以后可能会在idea中丢失这些),idea确实有选项来为jpa持久化单元中观察er图,这可能只在ejb模块中可以使用,在一个规则的web模块中使用jpa,不能调用er图选项。idea也全面的支持j2ee/java ee 5,它甚至提供了一个升级的路径从j2ee到基于注释的java ee 5方法。
至于应用服务器,idea提供了部署插件来为weblogic, websphere, jboss, geronimo和glassfish等应用服务器进行部署。 同时支持单元测试,像支持junit 4,并提供了测量code coverage的集成工具。
【it168技术文档】 eclipse 3.2.2 "callisto"/myeclipse 5.1.0 ga
vendor: | eclipse foundation | website: | www.eclipse.org | price: | free (base distribution)/open-source | | | vendor: | genuitec | website: | www.myeclipseide.com | distribution: | myeclipse ide | price: | $49/year subscription | 安装: 在windows和linux下,eclipse的安装非常简单,仅是一个.zip或者.tar.gz文件,你只需解压到你自己想要的目录下即可,为了使用eclipse开发环境,我们需要从eclipse站点上下载额外的插件(也可以通过help->software updates->find and install),我们最感兴趣的是可视化编辑器(swing gui),web工具工程(为了支持jsp)jsf工具和dali(为了支持jpa)。
在linux平台下安装新的插件可能会有些不同,eclipse能够与已经安装的linux应用程序集成的很好,然而,安装eclipse到一个系统的目录(如/usr/lib/eclipse),更新的插件只有具有root的权限的用户才能进行更新,解决方法是复制整个本地eclipse安装程序到一个主目录下的文件夹,以后在进行更新插件就不会在出问题了。这可能是由于登录的session是root的原因吧。
myeclipse是一个基于java的安装程序,在windows下与操作系统集成的非常好(包括快捷方式),在linux下虽然没有创建任何的桌面快捷方式,但使用起来并不觉得麻烦。
一般特性: eclipse一经出现就以其快速,丰富的特性赢得了认可,其主要的属性有: 1. 快速的性能 2. 重构功能 3. 快速修复错误 4. 调整/组织导入包 5. 弹出窗口进行代码自动装配 然而,eclipse的windows系统下,也有不和逻辑的地方,例如:最小化package explorer/hierarchy视图并没有收缩到边上,相反,eclipse仅折叠起来在屏幕上留下令人不习惯的界面,如图:

swing开发: eclipse的可视化编辑器是所有的java ides中最差的一个,主要是由于它支持最先进的布局是gridbaglayout,使用netbeans的matisse以后,你就会觉得使用eclipse来创建swing uis是多么的不方便。由于有社区的强有力的支持,myeclipse声称matisse gui构造器已经集成到了eclipse里,并且运行的非常好。netbeans正不断的将一些更新融入到新版本中(像bean绑定特性已经是netbeans 6.0的一部分)。没有一个ide像eclipse这样有强大的社区来开发插件不断的补充eclipse的基本的功能。
jsp/struts开发: web tools project (wtp)对eclipse增加了web开发,提供了一个固定的jsp编辑器来进行基本的jsp开发,在部署web应用程序上,eclipse可能会有一点问题,如:部署到tomcat上可能会由于错误而发生死锁。
wtp缺少对struts开发的支持,myeclipse完全祢补了这些不足,提供了对struts的完全的支持,包括对struts-config.xml进行图形化编辑,创建actions和formbeans的向导。
点击查看大图 myeclipse的struts-config.xml编辑器
eclipse和myeclipse也只不过是提供了一个可视化的编辑器来创建jsp/struts页面。下图是利用myeclipse的特性来增加到一个web工程。
点击查看大图 myeclipse的web工程选项
jsf开发: eclipse对jsf开发的支持应该比其他的ide更好,提供了更成熟的jsf功能,包括对faces-config.xml进行可视化编辑,代码自动装配,在jsp页面管理bean的属性,新的管理bean的向导,可视化编辑器建立converters, renderkits和validators。eclipse还计划发布可视化的jsp/jsf编辑器。
【it168技术文档】 企业开发: eclipse并没有对jpa提供官方的支持,但它提供了一个叫dali的孵化器项目来连接到发布的功能,目前它处于开发的早期阶段,虽然能够从一个数据库中产生实体,但是它产生的代码没用netbeans产生的好(例如没有任何自动创建的指定的查询),如果你没有从事jpa开发而正在使用hibernate,myeclipse是一个不错的选择。
对j2ee开发,eclipse支持创建ejb和ear模块,为了避免j2ee的复杂性,eclipse专注通过xdoclet来产生ejb,这无疑是一个很好的解决方案,减少了企业应用的复杂性。myeclipse扩展了这些功能通过提供session beans,消息驱动beans向导和容器管理持久化beans,同时也被xdoclet驱动。
目前,eclipse和myeclipse都没有支持java ee 5,在将来的版本中应该会提供对java ee 5的支持。

myeclipse的ejb代码产生
总结: 对不同的ide,每个人有着不同的简介,同时每个ide也有着不同的特性和优点,根据开发的不同需要可能会选择不同的ide。 在java开发的每个方面,每个ide都能胜任工作,然而根据你所做的不同开发如swing开发,web开发,或者企业开发,我们会选择不同的ide。
swing开发: 如果你专门从事swing开发,netbeans无疑是最好的选择,如果你没有选择netbeans而是选择了eclipse,建议使用myeclipse 和它的matisse4eclipse构造器。idea由于对jgoodies forms的支持,所以在开发swing方面与前两者相比并不占有优势。
jsp/struts开发: 开发jsp/struts首选的是idea,接下来是myeclipse,然后是netbeans,由于缺少对内建struts的支持,eclipse的基本版本没有竞争优势。
jsf开发: 在开发jsf方面,这三个ide可以说都是很好的选择,但是idea可能会更好一点,接下来是eclipse/myeclipse,最后是netbeans。
企业开发: 由于netbeans对jpa的支持和它产生代码的质量以及对持久化单元合适的设置,所以在企业开发方面,netbeans是首选,接下来是idea,由于eclipse的dali项目的限制,eclipse可能是最后选择的。如果放弃标准的jpa,从事hibernate开发,myeclipse是最好的选择。 idea由于对j2ee 和 java ee 5支持的很好,所以很适合进行企业开发,eclipse缺少对java ee 5的支持,应该是最后的选择。
|
|