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

【譯者按】前不久,NetBeans 6.0 M10一發(fā)布,就引起廣泛關(guān)注。在Java IDE市場(chǎng),除了老牌勁旅Eclipse之外,還有另外一個(gè)很受歡迎的產(chǎn)品——IntelliJ IDEA,它的重構(gòu)特性,備受推崇。最新版本的IntelliJ IDEA 7.0 M1,已于近日發(fā)布。
本文作者是一位忠實(shí)的NetBeans用戶。他從一個(gè)IDEA新手的角度,對(duì)NetBeans 6.0 M10和IntelliJ IDEA 7.0 M1作了一個(gè)較全面的比較。

  最近,我看到很多有關(guān)Java IDE IntelliJ IDEA的討論。我只是聽(tīng)說(shuō)過(guò)一些它好的地方,并且對(duì)它與NetBeans 6.0(beta)比較起來(lái),究竟如何?很好奇。
  我反復(fù)聽(tīng)到的一些有關(guān)IDEA的觀點(diǎn),主要是關(guān)于它的代碼編輯器、重構(gòu)能力以及性能的。眾所周知,在 重構(gòu)方面,IDEA領(lǐng)先于其他的IDE工具。所以,關(guān)于它的重構(gòu)能力,我沒(méi)有過(guò)多關(guān)注,取而代之的是,把一些我個(gè)人認(rèn)為在NetBeans里很有用以及有待改進(jìn)的地方與之比較。
  我下載的是IntelliJ IDEA 7.0 M1(dev build)和NetBeans 6.0 M10,使用的是JDK 1.6.0,運(yùn)行是在Ubuntu Linux 7.04上。這是我第一次嘗試IDEA。
  首先使我震驚的是IDEA啟動(dòng)、待用的快速。
  幾天后,當(dāng)我再次使用的時(shí)候,這種印象不再那么深刻,因?yàn)樗孟窕ㄙM(fèi)了更多的時(shí)間。或許,第一次使用IDEA的時(shí)候,Java虛擬機(jī)已經(jīng)載入了,而第二次沒(méi)有載入?另外,第二次啟動(dòng)的時(shí)候,IDEA還檢查了那些在第一次使用時(shí)創(chuàng)建的項(xiàng)目文件。
  IDEA在啟動(dòng)、可用上花費(fèi)了15秒,而NetBeans 6.0則花費(fèi)了30秒。因?yàn)槲颐刻熘粏?dòng)一次IDE,所以載入時(shí)間對(duì)于我來(lái)說(shuō),不是一個(gè)大問(wèn)題。
  接著,我在IDEA里新建了一個(gè)web項(xiàng)目。
  我真的不喜歡那個(gè)似乎包含了15個(gè)步驟的項(xiàng)目向?qū)В鼏?wèn)我各種各樣的問(wèn)題,例如:源文件放在哪個(gè)目錄?編譯文件放在哪個(gè)目錄?資源文件放在哪個(gè)目錄?如此等等。我必須閱讀大量文字才能做出決定。我更喜歡NetBeans 6.0的新建項(xiàng)目向?qū)АC總€(gè)步驟,它不只問(wèn)我一個(gè)問(wèn)題,并且為我作了大量的默認(rèn)設(shè)置。我喜歡這些默認(rèn)設(shè)置(例如路徑)的一致性。
  然而,我認(rèn)為,IDEA很靈活,足以適應(yīng)任意的目錄結(jié)構(gòu),這點(diǎn)很強(qiáng)大。當(dāng)你需要使用在別的IDE工具或者文本編輯器里寫(xiě)的代碼的時(shí)候,這很有用。NetBeans具有“新建基于現(xiàn)有源代碼的Java項(xiàng)目”的功能,我沒(méi)有去嘗試,不知道它有多靈活。
  IDEA具有“導(dǎo)入Eclipse項(xiàng)目”和“導(dǎo)入Jbuilder項(xiàng)目”的功能。NetBeans 6的幫助文件里說(shuō)可以通過(guò)更新中心來(lái)添加“導(dǎo)入Eclipse項(xiàng)目”和“導(dǎo)入Jbuilder項(xiàng)目”的功能模塊,更新中心已經(jīng)更名為插件管理器,但是我沒(méi)有看到這些插件,或許它們會(huì)在正式版本中出現(xiàn)?
  在IDEA里新建完一個(gè)web項(xiàng)目,我雙擊web.xml文件。
  接下來(lái)看到的,使我震驚,我看到了——原始XML文件!??!我還看到了ejb-jar.xml、sun-web.xml、persistence.xml以及別的部署描述文件,這些竟然都是原始XML文件!
  我不敢相信,IDEA竟然沒(méi)有NetBeans、Jdeveloper、WebSphere Studio以及別的IDE工具都有的可視化部署描述文件編輯器!一些開(kāi)發(fā)者或許認(rèn)為編輯這些部署描述文件很簡(jiǎn)單,尤其還有代碼提示。呵呵,那是因?yàn)槟阌玫牟皇荌DEA,否則你該發(fā)問(wèn)了:既然有JSF和Struts導(dǎo)航文件的可視化編輯器,那為什么沒(méi)有別的部署描述文件可視化編輯器呢?
  接下來(lái),我想嘗試的是“臭名昭著的”代碼編輯器。
  打開(kāi)web.xml文件,我開(kāi)始輸入一些可用的元素名稱,我對(duì)代碼提示的瞬時(shí)響應(yīng)能力,印象深刻。它只有一個(gè)短暫的延遲,代碼提示打開(kāi),大概只花費(fèi)了半秒,似乎我的手指還在按住CTRL+SPACE的時(shí)候,代碼提示就已經(jīng)打開(kāi)了。
  接著,我新建了一個(gè)Java類文件,用于試驗(yàn)更多代碼時(shí)的提示情況。我再次被代碼提示的快速所震撼!
  我發(fā)現(xiàn),在IDEA里,無(wú)論我按住或者單擊什么,都會(huì)有一個(gè)瞬時(shí)的響應(yīng)。非常棒!我以前認(rèn)為,IDEA用戶說(shuō)Eclipse和NetBeans很慢很慢,顯得過(guò)于夸張。但是,如果我習(xí)慣了IDEA的這種性能,對(duì)別的IDE工具,我想我也會(huì)說(shuō)同樣的話。然而,我不認(rèn)為你可以說(shuō)NetBeans 6不再那么慢了。
  NetBeans 6的一個(gè)主要的新特性就是完全重寫(xiě)了代碼編輯器。新的代碼編輯器使用了JDK 6.0的編譯程序API,用于訪問(wèn)抽象語(yǔ)法樹(shù)(Abstract Syntax Tree)。它反應(yīng)相當(dāng)快,對(duì)代碼編輯器里的每個(gè)細(xì)微之處都給予及時(shí)響應(yīng)。
  我嘗試了NetBeans 6.0的代碼提示功能,同樣印象深刻。我看到一些IDEA的用戶在說(shuō)NetBeans 6.0還是很慢,但我自己感覺(jué)不出來(lái)。與NetBeans 5.5相比,NetBeans 6.0的代碼編輯器有了顯著的改進(jìn)。
  之前我說(shuō)過(guò),我將不再談?wù)撝貥?gòu)。我食言了。
  我想談?wù)凬etBeans 6.0的新的重構(gòu)引擎——Jackpot。
  Jackpot是一個(gè)語(yǔ)言無(wú)關(guān)的用于重構(gòu)的API,它除了允許對(duì)普通.java源文件(例如XML或者JSF文件)進(jìn)行重構(gòu),還允許對(duì)非Java元素進(jìn)行重構(gòu)。這使得當(dāng)前的重構(gòu)工作更加安全并且易于使用。事實(shí)上,Jackpot是一個(gè)綜合的、用于生成便于理解和維護(hù)的代碼的框架。你可以把它作為實(shí)現(xiàn)這些特征的一個(gè)替代或者基礎(chǔ):重構(gòu)支持、高級(jí)搜索和瀏覽、質(zhì)量審查、復(fù)雜編輯任務(wù)的自動(dòng)化(類似宏命令),等等。
  Jackpot還提供了用于編寫(xiě)重構(gòu)規(guī)則的查詢語(yǔ)言。你會(huì)發(fā)現(xiàn),NetBeans 6里面的重構(gòu)規(guī)則實(shí)際上就是Jackpot腳本。我相信有一天,Sun或者別的社區(qū)會(huì)創(chuàng)建出匹配IDEA重構(gòu)能力的Jackpot腳本。
  現(xiàn)在回到IDEA,這是我喜歡的一些其他特性:
    當(dāng)新建一個(gè)JSF項(xiàng)目時(shí),我可以選擇Sun的參考實(shí)現(xiàn)或者Apache的MyFaces。我通常選擇Sun的參考實(shí)現(xiàn),但是需要用到某些應(yīng)用服務(wù)器的時(shí)候,你必須使用MyFaces。我認(rèn)為一些JSF的組件庫(kù)還是依賴于MyFaces。
    內(nèi)置了對(duì)Spring和Hibernate的支持。我敢打賭,NetBeans默認(rèn)沒(méi)有提供這些內(nèi)置支持,是因?yàn)镾un正在推動(dòng)Java EE。是有幾個(gè)關(guān)于Spring和Hibernate的插件,但是我不確定它們是否好用,我也從沒(méi)有看到有人在使用或者談?wù)撍鼈儭?br />     IDEA支持這樣一些應(yīng)用服務(wù)器:Tomcat、Geronimo、WebLogic、WebSphere、Jboss、Glassfish/Sun App Server。NetBeans也支持這些,但是使用Geronimo和WebSphere時(shí)出現(xiàn)了異常。
    IDEA支持使用目錄展開(kāi)格式來(lái)部署web應(yīng)用。我不認(rèn)為NetBeans也支持這個(gè)。
    IDEA內(nèi)置了很多代碼分析功能,例如,代碼度量、測(cè)試覆蓋、相當(dāng)于checkstyle和findbugs,等等。NetBeans有一些插件用來(lái)實(shí)現(xiàn)這樣的功能,但是我懷疑在NetBeans 6里它們是否還能正常工作,并且它們不是內(nèi)置的。
    不好的地方,要想在IDEA里使用性能分析器,你需要再多花500美元。NetBeans則內(nèi)置了一個(gè)強(qiáng)大的性能分析器。
  我看到有開(kāi)發(fā)者抱怨說(shuō),包含10000到20000個(gè)文件的項(xiàng)目,在NetBeans里運(yùn)行很慢。我不知道他們使用的是NetBeans 5.5還是6.0?但是在6.0里,性能問(wèn)題是被最優(yōu)先考慮的。M10是NetBeans 6的最后一個(gè)里程碑版本。目前功能基本完成了,從現(xiàn)在到11月份最終版發(fā)布,主要的工作就是修復(fù)bug和改進(jìn)性能。
  我承認(rèn),我沒(méi)有對(duì)IDEA做一個(gè)詳盡的調(diào)查,我只是粗略地研究了一下,但是對(duì)我關(guān)心的熱點(diǎn)問(wèn)題都有所涉及。
為了完全體驗(yàn)IDEA,我需要花費(fèi)數(shù)周的時(shí)間來(lái)學(xué)習(xí)它的快捷鍵、重構(gòu)特性。喜愛(ài)IDEA的人會(huì)說(shuō),一旦你學(xué)會(huì)了它,你將不再對(duì)別的IDE工具感興趣。如果我必須使用IDEA來(lái)工作,我想這也不錯(cuò)。我雖沒(méi)有用Java開(kāi)發(fā)過(guò)百萬(wàn)個(gè)項(xiàng)目,可是使用NetBeans我并沒(méi)有覺(jué)得受到什么限制。NetBeans有我需要的所有功能并且我不覺(jué)得它慢。
  我想,我不會(huì)馬上就換用IDEA——至少在NetBeans 6.0最終版發(fā)布之前。
(原文地址:http://www.ryandelaplante.com/rdelaplante/entry/a_comparison_of_netbeans_6)


歡迎大家訪問(wèn)我的個(gè)人網(wǎng)站 萌萌的IT人