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