比較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市場,除了老牌勁旅Eclipse之外,還有另外一個很受歡迎的產(chǎn)品——IntelliJ IDEA,它的重構(gòu)特性,備受推崇。最新版本的IntelliJ IDEA 7.0 M1,已于近日發(fā)布。
本文作者是一位忠實(shí)的NetBeans用戶。他從一個IDEA新手的角度,對NetBeans 6.0 M10和IntelliJ IDEA 7.0 M1作了一個較全面的比較。

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


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