技术开发 频道

JAVA IDE之争,谁会成为最后的的幸存者(下)



【IT168 专稿】在上一部分中我们讨论了NetBeans,在本部分中我们将对IntelliJ IDEAEclipse的特性进行讨论。
 
一、IntelliJ IDEA 6.0.4
卖主
JetBrains
网址
价格
$499.00(升级299美元)
1.   安装
Windows下,IDEA提供了一个EXE安装器。在Linux下,安装更加麻烦,包括一个单独的TAR.GZ文件。在提取内容时,你必须手动改变“bin”子目录,并且执行“./idea.sh”。如果你没有JDK_HOME变量时安装将会失败,在你的.bashrc文件如下做更好,例如:
JDK_HOME=/home/jacek/Dev/Java/JDK/jdk1.6.0_01
export JAVA_HOME
JAVA_HOME=/home/jacek/Dev/Java/JDK/jdk1.6.0_01
export JAVA_HOME
 export PATH=$JAVA_HOME/bin:$PATH
  不幸的是,JetBrains没有为任何一个主要的Linux发布版本提供一个标准的.deb或RPM文件,因此,安装器没有很好的集成到桌面(例如,没有提供桌面快捷方式或从K菜单中进入)。更坏的是,对Kongueror文件管理器的bin/idea.sh文件的双击操作也不能正常工作(它返回一个JAVA_HOME没有建立的错误,虽然JAVA_HOME事实上已经被正确建立)。唯一能够成功进行的操作看来是手动地通过命令行来执行”./idea.sh”文件。IDEA的安装器在Linux下的安装的经历说明,它的安装还需大幅度的改进,它在这三种IDE中是安装最差的。
 
2.  主要特色
像NetBeans一样,IDEA有一个灵活的布局,提供了可通过配置改变dock/pin/float面板的能力。但是,它的配置不像配置NetBeans的窗口系统(IMHO就是这样的一种)一样平滑。
但是,这只是强大的IDEA编辑器(它长期被推上很高的位置)的一个令人觉得苦恼的地方。这个编辑器很快,有复杂的上下文相关的高亮显示、提示以及建议—更别说它的给人深刻印象的重构选项。IDEA编辑器是任何一个核心编程者的梦想。我花的时间越多,使得我编程效率更高的绝技也就更多。我确信我不能在评论的有限时间里探索出它的所有功能(见图4所示,该图是IDEA编辑器的一个简单实例,它展示了IDEA编辑器的高亮以及其语法高亮的功能)。

                                         图4. IDEA编辑器实战



3.  Swing开发
IDEA提供了一个相当强大的图形用户界面编辑器。虽然它没有做到像NetBeans的Matisse那样,但是它毫无疑问的是只比NetBeans稍差的那一个。特别地,它支持JGoodies表单(无疑最好的可用的布局管理器在GroupLayout前),在这些仍然被GridBagLayout(例如Eclipse的可视化编辑器)迷住的来说,它远远超前了。
有意思的是,IDEA坚持将产生的UI布局放在一个单独的.form文件中(这点与NetBeans类似),但是它默认不产生相应的Swing编码,它只在通过图形用户界面编辑时的编辑期间才产生(它也可以作为一个单独的ant任务打包)。如果你比较喜欢通过IDE在你的java文件直接的自动生成代码,你需要通过一个选项(设置选项是个更好的方法,因为我更喜欢不要让我所有的UI编码都隐藏或只有在运行IDE的特定的自动代码生成机制才显示出来)设置来激活该功能。
 
4.  JSP/Struts开发
在IDEA中对Struts的支持是它的一个闪光点。In a fine example of the sort of attention to detail that IDEA is known for,它甚至可以为你下载所有需要的包。它不仅自动的设置所有的配置文件(包括Tiles和验证器),而且提供被叫做简单的java助手的struts面板,它为所有的Struts配置文件(包括tiles-config.xml和validation.xml)提供了图形编辑器和制作向导。
   IDEA没有编辑JSP/HTML页面的可见编辑器,但是常规的IDEA的JSP/HTML编辑器即使没有可视化组件也是出色的。特别地,对嵌入式JavaScript的支持将会是对任何一个处理大量的DHTML或AJAX代码的人一个极好机会,另一个只有在做梦才会想到的一个吸引人注意的例子是,JavaScript编辑器提供对浏览器特定的元素(IE, Mozilla和Opera)的支持,也包括流行的AJAX框架,例如Dojo,Bindows和Prototype(图5和图6是IDEA对Struts支持的一个示例)。



5. IDEAStruts Web应用程序的安装



6. IDEAStruts助手

    对于Web2.0的开发,IDEA对Google的Web工具包提供了很好的支持,这点已经成为它的核心特征之一。我发掘这点很吸引人,特别当你想到新的Google的Web工具包是怎么样的时候(但是既然这是由Google命名的,所以赢家也必然是他,很高兴地看到IDEA那么容易的支持了它)。
 
5. JSF开发
  与Struts对应,JSF工程的选项是一次易用性的练习。你能过选择JSF的如下版本:1.0,1.1或者1.2,以及它的实现: JSF的R1或者Apache的MyFaces。IDEA甚至能够为你下载所有需要的包(在下载jar包时它还会显示相应提示)。NetBeans工作组注意:它对开源框架或实现(代替了Sun推荐的实现)提供了很好的支持,这在NetBeans是没有的。而且,JSF组件提供了对JBOSS Seam提供了支持,所有的人似乎都想为JSF开发提供一个标准的框架(就像Struts为JSP所做的那样)。这为IntelliJJava Web世界的边缘开发如此关心提供了证明。
   重构看起来为JSF所关心(eg.将一个管理bean正确的移到另一个包中要更新faces-config.xml)。(见图7和图8,展示了IDEAJSF的支持。)



                                          7. IDEA 中新建一个JSFWeb应用程序



                                        8. IDEA JSF的配置

   
 IDEAJ2EE规范提供完全的支持。更重要的是,它对EJB3.0JPA提供了完全支持,虽然在这点上它现在还是不及NetBeansNetBeans为在持久层组件中的JPA提供者提供了自动添加入口的方法,并为所有的实体域的命名查询自动产生了编码,这点在IDEA中是没有的)。IDEA提供了对JPA持久化组件的ER图进行查看的选项,但是不幸的是,这仅仅在EJB组件中是可用的。当在一个普通的web组件中实用JPA时,我不能调用ER图选项。

   
IDEA的对J2EE/Java EE 5的支持到了一个比较高的层次,它甚至提供了一个从J2EE到基于注释的Java EE5的升级路径)。IDEA为所有主流的应用服务器提供了部署插件,例如WebLogicWebSphereJBossGeronimoGlassfish

   
为了做单元测试,它提供了对JUnit4的支持并且也为测量代码的覆盖度提供了一个集成的工具。

 



二、Eclipse 3.2.2 /MyEclipse 5.1.0 GA
1.  安装
对于Windows和Linux两种操作系统,Eclipse的发行文件分别是简单的.zip文件和.tar.gz文件,此文件可以解压至任意的目录。该文件提供一个基本的运行骨架,可以创建“Hello World”程序,但其它的功能受限。为了能将Eclipse变成一个可工作的开发环境,须从Eclipse的官方网站(在如下目录:帮助->软件更新->查找并安装)下一个额外的插件。其中我最喜爱的插件有:可视化编辑器(构建Swing GUI)、网站工具工程(支持JSP)、JSP工具及Dali(支持JPA)。据Eclipse官方称,最后两个插件只是BDebianeta版本,目前其版本还不到1.0。
在Windows下安装插件是很简单的。而在Linux下,比较适合的方式是下载Eclipse的标准库(基于Debian或面向PRM的Linux系统特色化Eclipse),它完好的结合了Linux应用程序的安装方式。但是,该方法将Eclipse安装至一个系统目录(例如Ubuntu/Kubuntu系统的/usr/lib/eclipse目录),要更新Eclipse时,须以root用户登陆系统或是采用具有root权限的sudo工具来实现。可惜的是,Eclipse似乎并没有发现此问题。我偿试在受限的目录“/usr/lib/eclipse”下安装Eclipse,下载插件时出现了错误,因为Eclipse并没弹出让我输入root密码的提示。解决问题的方法很简单,我只是将整个本地的Eclipse安装包复制到当前用户的一个目录下,则顺利的安装所有的插件(我想我能够以root用户登陆,从而拥有一个session,但我并不愿意那样做)。
MyEclipse程序是基于Java的安装包,在Windows下很完善的结合操作系统(包括快捷方式),同样,在Linux下的安装下很方便(安装后不能创建快捷方式)。
 
2.  主要特色
当运行Eclipse时,你会发现它是一款快速、漂亮、富有特色的Java编辑器,真是不愧为Eclipse所宣称的皇冠之珠。它有如下特点:
   
(1)  程序执行速度快;
(2)  强有力的重构;
(3)  快速排错;
(4)   对imports语句对管理;
然而,就我个人而言,我不是很喜欢Eclipse的窗口系统,特别是它的perspectives/views模式(同样我也不喜欢NetBeans4.0中这种方式,但他们很明智的替换掉了它)。我比较喜欢将相关的editors/palettes/panels等功能在一个简单的窗口上进行配置。当然这只是本人的一家之言。
此外,我发现Eclipse的窗口系统中存在一些不合逻辑的地方。例如,当我将"Package Explorer/Hierarchy"视图最小化之后,此视图并不能化成边上的一个小块(而我在NetBeans或是Visual Studio.NET经常可以这样)。相反地,Eclipse只是把它折叠起来,在屏幕上留下一块很大的空白――真是一种不常见的设计(如图9-Eclipse窗口陌生行为示意图)。除此之外,整个窗体系统还是可行的,但我更喜爱NetBean的设计方式。


3. Swing开发
到目前为止,在主要的Java编程工具中,Eclipse的可视化编辑器是最弱的图形用户界面(GUI)编辑器,因为它所支持的非常先进的布局器是网格包布局器(GridBagLayout)。在用惯了NetBean的Matisse(Matisse将是一个支持Swing显示布局的工具,译者按)后,我没法想像采用这种古老而又笨重的方式来进行Swing开发的情景。幸运的是,MyEclipse将Matisse图形用户界面构建器直接集成进Eclipse,并且工作完好。尽管如此,相对于NetBeans团队不断的对Matisse的提升(例如NetBeans6.0即将发布的bean构建器),MyEclipse的这种改进仍然显得力不从心。然而,事实上,Eclipse平台所提供的Matisse功能促使它成为Java编程工具的闪光点:毕竟其它的竞争对手还不能找到愿意完成Eclipse的基本功能的插件开发商。
 
4. JSP/Struts开发
WTP(Web Tools Project)是Eclipse一个的Web开发的特色。它提供基本的JSP开发和JSP编辑。部署WEB应用程序往往是一件不怎么顺利的事情。当我将WEB应用程序部署到Tomcat下时,经常由于错误而导致程序的锁定。但Eclipse在此问题上与其它的JAVA编程工具形成鲜明的对比,它并无此种问题。
WTP也缺少对Struts开发的支持,这似乎是它的一个主要的功能缺陷(尽管在http://www.eclipseplugincentral.com/可以快速查找到不下24种商业或是开源的支持Struts的插件)。通过MyEclipse对Struts的支持完全克服了些漏洞,它包括对struts-config.xml文件的图形化编辑器以及用于创建新的Action和FormBeans的wizards(图10显示了它对Struts的编辑功能)。
附带有MyEclpise的Eclipse是唯一一个提供JSP/Struts网页编辑功能的开发工具(图11显示了MyEclipse可添加Web工程的功能)。但遗憾的是,我在Linux下,由于一个程序错误(bug)导致不能完整的测试此功能。
 
5. JSF开发
现行的Eclipse是提供了支持JSF开发功能的预览版本。尽管它只是预览状态,但就我而言,觉得它实际上已经很有用了,远胜于竞争对手所谓对JSF成熟支持的功能。它包括对faces-config.xml的可视化编辑功能、JSP页面中代码的自动完成功能、新的bean管理功能、可视化创建Converters, RenderKits, and Validators的功能。更让我激动的是,Eclipse开发团队计划发行JSP/JSF的可视化编辑器。尽管MyEclipse的JSF功能比较相似,但在我测试Eclipse时,此功能是最适合的。
 
6. 企业级开发
Eclipse还没有提供对JPA(java持久性API)的支持。但一个名叫Dali的项目将支持此功能,此项目正处于开发的早期阶段。我可以从数据库中产生一个实体的工作集,尽管生成的代码还没有达到NetBeans目前的水平(例如,它不能自动创建命名的查询)。如果你还没有准备采用JPA,而是正使用Hibernate,则MyEclipse将是一种明智的选择,因为它对Hibernate的支持特别好。
对于J2EE开发,Eclipse支持创建EJB和EAR模块。为了避免J2EE的复杂性,似乎采用XDoclet(一个扩展的Javadoc Doclet引擎,译者按)来创建EJB更加适合,因为在采用Java EE5 和EJB3.0做为减小企业级应用程序的复杂性之前,XDoclet被认为是最好的方式。MyEclipse通过以下方式来扩展此功能:提供额外的session beans管理、信息驱动beans、XDoclet驱动容器管理持久beans。
就目前来看,不管是MyEclipse还是Eclipse都还不支持Java EE5。但Java EE5是最新的技术规范,因此我认为Eclipse的奠基者们正忙着支持此规范的功能在新版本中发布(图12-MyEclipse对J2EE 1.4 EJB的wizards)。


我将是第一个承认“没有任一个评论是完美的”的人。不可能评估所有的开发需要(这个评论仅仅涵盖了某些议题,例如RCP,UML,JUnit和报表支持),所以,很明显,你对IDE的选择需要基于哪种特定的Java技术更好的满足了你。
在这里评论的每一个IDE都在大多数Java开发的小方面做得很出色。但是,有一些比其他的做得更好,这在于你要做的是Swingweb或者企业开发。因此我在这些方面组织了一个评论摘要。
1. Swing开发
如果你是专门从事Swing开发的,NetBeans定然是你选择的IDEMatisse在此竞争者中是很简单的一种。基于团队的原因你当然毫无疑问要选择Eclipse,我当然还会推荐带有它的Matisse4Eclipse建造器的MyEclipse。接着这儿有两个选择,我会将IDEA排在前面(因为它支持JGoodies表单),接着是Eclipse的默认可视化编辑器。
 
2. JSP/Struts开发
在这里的讨论更加激烈,我比较支持有明显优势的IDEA,接着是MyEclipse,最后才是NetBeans。因为缺乏对Struts的支持,Eclipse的基本的发布版本是加入不了这场竞争的。
 
1.       JSF开发
在这点上三者旗鼓相当。曾经,我觉得IDEA是其中最好的,紧接着是Eclipse/MyEclipseNetBeans排在最后面,因为它只提供了最基本的支持。显然,这个顺序在你考虑将NetBeans可视化网页包加入考虑中(假定这个限制是可接受的),会有比较大的不同。
 
2.       企业开发
因为对JPA的支持,我将NetBeans排在第一位(简单地来说,由于产生代码的质量和适当的对持久化组件的支持),接着是IDEA,最后是Eclipse。如果你乐意放弃标准的JPA而直接选用Hibernate,那么MyEclipse在这方面也成为一个很值得考虑的IDE
对企业开发来说,我想说IDEA的成功之处在于它对J2EEJava EE 5的强烈支持,紧跟其后的是NetBeans(它也在企业开发上给人留下深刻印象),最后才是Eclipse/MyEclipse(主要原因在于它当前缺乏对Java EE 5的支持)。
 
5. 轻视.net,后果自负
如果说Eclipse是一个800的坏蛋,则微软是一只10吨的地下金刚,1(t) =2000(lb),作为一个以前在C#.NET上做了很多工作的人来说,我一直在关注微软的.NET3.0和它的下一个版本Visual Studio的动态。我希望没有哪一个Java IDE的卖主会觉得很舒服而因为自己所获得的成就停止前进的步伐,因为微软在开发库和开发工具上面做了很多努力,因此只有Java能在这些方面与之匹敌(或者更好,我认为在MatisseJPAEJB3.0上它甚至已经超越)时才能保持健康。
   已忽略了微软影响的公司和技术已结束于IT领域的历史(我是作为一个ex-Sybase/PowerBuilder的开发者的身份写的,这两者一度是个很强大的工具,但因为其自身的一些错误而败得很惨,而微软看起来似乎永远都没有终止提供资源)。我很高兴看到Java从前犯的错误是“首先发布了API,接着等待高水准的开发工具的出现”,而不是“发布API并尽可能的提供世界级的开发工具”,因为这实际上是微软这几年来一直在做的事。
0
相关文章