【IT168 評論】好的程式設計師總是對開發環境有著不同尋常的熟悉,有的人可能對完整的IDE熟悉,它們也是本文的重點,還有人可能會emacs或vi/vim這樣的編輯器熟悉,但據調查發現,開發人員每隔幾年就會轉移到新的IDE,有可能是項目需要,或跳槽到了新公司,或是自己的偏好發生了轉移。
許多開發人員在選擇新的編程工具時總會犯難,為了解開你心中的疑團,本文就對流行的Java開發工具做一次全面的橫向對比,看完本文說不定就不再犯難了。好吧,首先請各位選手登臺亮相吧,它們分別是:Eclipse,JetBrains IntelliJ IDEA,Netbeans和Oracle JDeveloper。這些工具都很優秀,對重構,語法檢查和調試的支持都很好,大都能直接從IDE將項目部署到伺服器,並能進行遠程調試。單獨對比它們的功能已經沒有什麼意義了,因為它們都支持插件,我們更注重的是易用性,文檔和幫助系統的質量,以及插件的數量和質量。提到插件就不得不提Eclipse基金會,長期以來它都信奉和推崇插件,Eclipse的插件數非常豐富,每次發行新版本都會同步推出大量的新插件。
Netbeans和IntelliJ IDEA也有很多的插件,但它們更注重用戶體驗,JDeveloper同樣易於使用,不過插件數量就少一些,此外,它和Oracle的軟體堆棧聯繫緊密,從商業角度出發更有吸引力,但也正因為如此,JDeveloper才沒有出現較大的插件生態系統。
圖1 總分對比
這些IDE都支持Java開發中用到的通用語言(JSF,HTML,CSS,XML等),有些還支持JVM腳本語言(如Groovy和JRuby),甚至是非Java語言(如C/C++,PHP)和建模語言(UML),下表顯示了這些IDE默認安裝支持的主要語言清單。
圖2 支持的開發語言對比
下表顯示了所有IDE對Java SE和企業開發,以及對Java ME嵌入式和Android移動開發和的支持良好程度(這裡不涉及任何第三方輔助增強工具,如果要加入第三方的工具,Eclipse對Java ME的支持將有所改善)。
圖3 對開發平臺支持的對比
在本次評測中,我們特別注重易用性和編碼能力,我們認為它們是決定生產力和用戶滿意度的主要因素,它們和插件一樣重要,在記分卡上會有所反映,我給每個因素設置了不同的權重,如果你不同意我的評估結果,你可以根據你的看法進行修改,並得出你自己的排名。
Eclipse 3.6
Eclipse是所有Java IDE中最突出的一員,其用戶量和插件規模都是無人能敵的,這一切首先要感謝其創始公司IBM,IBM將其開源,成立獨立的基金會,並提供持續的資助,其它廠商和社區也可以為Eclipse做貢獻,事實證明,這個決策是非常英明的,Eclipse社區非常活躍,並為其貢獻了大量優秀的插件。
Eclipse廠商獨立性的好處很快就有了回報,Google公開宣布Eclipse成為Android開發的首選平臺,曾經Netbeans也成為Google的熱門候選,但Oracle最近針對Android中使用的Java虛擬機而起訴Google,讓Google徹底斷了這個想法。
最新版本是今年6月發布的3.6,代號太陽神,它加入了很多新的功能,稍後我會提及它們。Eclipse是自成一格的IDE,其界面布局和其它IDE有著很大的不同,其中最重要的一個概念就是透視圖,根據不同的行為,顯示的透視圖可能不一樣,這種設計是為了滿足豐富的插件使用,因此其界面布局有時會發生很大的變化。
在基本的Java開發環境中,Eclipse放棄了一些約定,它要求用戶遵循它的規則,例如,在創建項目前需要先創建一個工作區,項目是創建在工作區之下的,你也可以在工作區下面創建工作集,對工作區的依賴意味著項目的遷移是件麻煩事,嚮導提示往往讓人犯暈,「放手去做」的思想在Eclipse中行不通,幾乎所有事情都需要填寫對話框或選擇項,要麼無法區分或不直觀。
圖4 Eclipse IDE的Java編碼界面
例如,在未安裝Groovy插件前,將一個混合了Groovy和Java的項目導入到Eclipse,如果你點擊Groovy文件進行編輯,對彈出一個菜單,包含四個選項:文本編輯器,系統編輯器,本地編輯器和默認編輯器,因為沒有提供任何幫助或提示信息,在這裡就只能靠猜的方法選擇了,事情還沒完,如果你選擇系統編輯器,Eclipse開始運行腳本,而不是打開編輯它,總之,開發人員需要有豐富的經驗才能很好地駕馭好Eclipse,不要迷戀嚮導是真理。
要摸清Eclipse的底細,用戶得嚴重依賴於幫助系統,這麼多年來,Eclipse的幫助系統確實進步了不少,但仍然有不足之處。此外,Eclipse早期版本會虛假報告錯誤數量,不過現在這一現象已基本得到消除,雖然每次發布新的版本都會修復一些問題,但其核心的編輯功能應該重寫和重新設計。
我還要補充一點,在Java開發領域,Eclipse的設計問題必須要改進了,現在它面對的競爭對手一個也不差,它的那些缺點更能說明問題,在其它領域,如C開發,原本就鮮有優秀的IDE,因此抱怨的聲音也很少,Eclipse現在也是Linux下C/C++開發的主要IDE。
儘管存在問題,使用Eclipse的插件可以獲得無限的擴展性,這也是為什麼許多插件開發人員力挺Eclipse的原因,許多優秀的Eclipse插件在其它IDE中是找不到的,因為這些插件的開發者不願意移植,如著名的任務管理器Mylin,你只能在Eclipse中享用它。
過去,Eclipse插件管理一直被用戶詬病,因為插件之間的依賴性太強了,Eclipse已經意識到問題的嚴重性,並在逐漸解決這些問題,今年發布了Eclipse Marketplace,一舉解決了尋找插件的困難。
JetBrains IntelliJ IDEA 9.0.3
JetBrains的IntelliJ有兩種版本:付費和免費的開源社區版本,本文用於比較的是其付費版本,社區版只提供了基本的編輯功能。IntelliJ IDEA比其它IDE的速度要快,因此吸引了大批忠實用戶。對於初學者,IntelliJ的開發人員經常關注Java社區的一舉一動,因此他們總能以最快的速度添加對新的,熱門產品的支持,如IntelliJ是第一個為Groovy和Grails提供強大支持的IDE,也是第一個為JavaScript提供高級支持和調試功能的IDE,即使它不是第一個提供支持的,也會爭取是第二個,或是提供更好的支持。IntelliJ可與Ant和Maven無縫集成,支持Spring,並能夠從Java編碼跳躍到Adobe Flex和PHP。
IntelliJ IDEA憑藉其獨樹一幟的功能贏得了眾多用戶,如幾年前,它率先推出用於單元測試的結果對比窗口,在進行單元測試時,可以並排對比預期結果和實際輸出,這在當時可是非常拉風的功能。
即便是如今,它的功能也比其它競爭對手更優秀,有些功能完全是獨一無二的,例如,它提供的重構工具就比其它IDE強大得多,此外,它內置的語法檢查器不僅可以揪出明顯的語法錯誤,還可以「聞」出問題,那些寫得不好,但可以正常運行的代碼在它靈敏的嗅覺下暴露無遺,這樣的代碼實現包括:簡單功能複雜化,只有一個為「真」的條件等。IntelliJ還提供了代碼覆蓋工具,它能在IDE中顯示測試時哪些代碼被執行過了,IntelliJ還捆綁了開源的EMMA產品。
圖5 IntelliJ IDEA有兩個並排的編輯器
IntelliJ還有一個很獨到的功能,那就是高亮顯示重複的代碼,在一個很大的代碼庫中要找出重複的代碼可不是件容易的事情,它還提供了一個依賴分析工具,可以準確地顯示出方法之間的依賴關係。
IntelliJ往往會預先考慮到很多需求,例如,這裡提到的所有IDE都有一個相同的彈出式功能,當你在編輯器中輸入方法的名稱時會彈出一個輔助窗口,這個功能也被稱為自動完成,在IntelliJ中,它會藉助代碼上下文信息猜測你要使用的函數,並將其置於列表頂部,因此使用箭頭鍵向下滾動的機率就小多了,最不可思議的是,它的準確率很高,這是一個非常人性化的功能。
說了這麼多的優點,難道IntelliJ就沒有缺點了嗎,當然不是,抱怨最多的就是缺乏良好的文檔支持,如果遇到問題可能沒有人能幫得上忙,要弄清楚其高級功能也不容易,幸運的是,開發商會回答電子郵件提問,但要想得到正確的答案,一次只能問一個問題,由於開發商在俄羅斯,因此還需要忍受時差,IntelliJ的第二個問題是啟動時間過長,雖然在9.0中有所改善,但啟動速度仍然緩慢。除了這些問題,IntelliJ是一個優秀的IDE,與其它競爭對手比起來,它是一款成功的商業產品。
NetBeans 6.9
過去5年中,NetBeans的市場佔有率上升很快,據位於紐約的BZ市調公司發布的年度Java IDE調查報告顯示,2005 NetBeans在受訪者中的使用比例是17.9%,今年這一數字翻了一番,達到了35.7%,它是這個期間上升最大的Java IDE,在總的普及程度方面,NetBeans僅僅次於排名第一的Eclipse。
NetBeans取得今天的成績是和它的前主人Sun微系統公司悉心關注分不開的,當今年早些時候Oracle收購Sun時,Java社區對NetBeans的命運非常關注,特別是當Oracle宣布不再繼續支持Sun的開源項目時,如OpenSolaris和Kenai託管項目,關注度更是達到了前所未有的高度。
Oracle開發工具產品管理老大Duncan Mills傳達了Oracle的旨意,NetBeans將會繼續保留,他說:「我們會積極支持JDeveloper和NetBeans,JDeveloper主要用於內部和企業用戶,特別是那些需要Oracle融合中間件解決方案的用戶,而NetBeans主要為那些想開發其它技術的用戶提供,我們希望他們最終遷移到Oracle解決方案和JDeveloper」。
NetBeans最突出的優點是它的易用性,輕盈和簡潔,訪問它的下載頁面就可以感受到這種氛圍,例如,下載NetBeans時,你會看到它提供了多種預配置的版本,你只需要選擇合適的下載即可,Eclipse也有類似的體貼之處,而IntelliJ和JDeveloper只提供了粗暴的下載連結。
圖6 NetBeans編輯器,下方是從代碼抽取的未完成任務列表
NetBeans支持JRuby和JavaFX,這是其它IDE所忽略的,當然,NetBeans也是支持C/C++和PHP的,JRuby最初是由Sun開發的,這也是為什麼NetBeans要支持它的緣故。JRuby重要開發人員Charles Nutter最近告訴我,在語言支持方面,NetBeans有不可逾越的優勢,它也支持桌面腳本語言JavaFX,Oracle也表示會堅定不移地推動這項技術的發展,但引來的質疑聲也很大,因為JavaFX在用戶中間的反響並不好。NetBeans一度停止了對UML圖的支持,但幸好現在又提供了。
NetBeans早在幾年前就經過了完全重新設計,保留了簡單易用的導航,它和IntelliJ不一樣,IntelliJ是在輸入時執行語法檢查,NetBeans是在後臺不斷編譯,Eclipse有一個配置選項也可以提供類似的功能,這意味著一旦你完成編碼,就可以運行代碼了,NetBeans也可以在後臺為每個項目創建一個Ant生成文件,對開發人員來說,Ant生成文件是一個非常有用的資源,開發人員可以用它精確地控制IDE的生成過程。
NetBeans還附帶了一個分析器,一個Juint單元測試生成器,以及一個國際化字符嚮導,對於企業級開發,它提供了綁定Tomcat或GlassFish Open Server的下載選項,為了監控運行的應用程式,NetBeans集成了對JMX(Java管理擴展)和Jconsole的支持。
NetBeans的插件數量遠遠少於Eclipse,和IntelliJ IDEA的插件數量相當,其中好多插件都是從Eclipse平臺移植過來的,正如我前面提到的,許多Eclipse插件開發者現在都不再往其它平臺移植了,但如果NetBeans繼續以最近5年的速度增長,也許情況會有所變化,就目前而言,插件是NetBeans最大的弱項,其它方面NetBeans算得上是最用戶友好的IDE了。
Oracle JDeveloper Studio 11g (11.1.1.3.0)
Oracle的JDeveloper Studio和這裡比較的其它產品有很大不同,那句「走自己的路,讓別人去說吧」的名言用來形容它最合適不過了,首先它不是免費的,原始碼不對外開放,確切地說,它更像是Oracle的內部開發工具。
受Oracle的影響,JDeveloper在某些方面顯得非常狹隘,但它也有其獨到之處,有趣的是,Oracle公司其它產品的版本號永遠不能超過其核心產品 – 資料庫的版本號,因此我們經常看到Oracle產品的版本號都很長很長。
JDeveloper的安裝很簡單,但最終在系統中註冊的產品名稱居然是「Oracle融合中間件」,大多數人認為開發工具不屬於中間件範疇,但Oracle堅持這樣分類估計是想強調其對中間件開發的支持強度,例如,JDeveloper為ADF(應用程式開發框架)和Java Server Faces(JSF)組件集提供了許多支持,也支持TopLink(Oracle從BEA收購取得的持久化層),JDeveloper也提供了大量的Java EE工具,包括一個Weblogic Server的嵌入式版本,它可以在IDE內啟動和管理。
如果從上到下全部使用Oracle軟體堆棧中的產品,JDeveloper一定不會讓你失望,例如,你可以將ADF中的Oracle JSF組件切換成其它廠家的,你還可以做一些所見即所得的UI開發。
圖7 JDeveloper編輯器,底部面板用於管理嵌入的Weblogic Server實例
JDeveloper和其它IDE比起來,其響應速度較快,幫助信息也很全,按下幫助組合鍵,屏幕很快彈出相關的幫助信息,在這方面,它提供的幫助信息和其它IDE比起來,其上下文感應能力更強。JDeveloper也內置了分析器,可以測量性能和內存消耗,它的語法檢查器還發現了一向自詡的IntelliJ IDEA的代碼校驗工具未能發現的錯誤,功夫不負有心人,Oracle在這方面下了大力氣,效果就是不一樣。
JDeveloper的弱項是缺乏一個強大的插件生態系統,這和Oracle此前忽略該領域的決策息息相關,不過現在Oracle已經醒悟了,雖然JDeveloper也有不少插件了,但大部分都是公司自己寫的,幾乎看不到第三方貢獻的插件,我找了很久都沒有發現代碼覆蓋分析插件,這是阻礙JDeveloper發展的一個重大限制。
Oracle清楚地表明JDeveloper將繼續作為公司的主要開發環境,對於那些致力於Oracle軟體堆棧開發的組織而言,JDeveloper是不二之選。
下表對幾個流行的Java IDE做了一個概述:
Java IDE | 平臺 | 成本 | 總結 |
Eclipse 3.6 | Java 5,Mac OS X,Windows,Linux | 免費 | Java IDE市場的絕對領導者,每年一次重大發布,第三方插件非常豐富,但Eclipse難學,難用,簡單任務被複雜化 |
JetBrains IntelliJ IDEA 9.0.3 | JDK 5或6,Mac OS X,Windows,Linux | $295 | 本次評測唯一的商業軟體,其功能完善,易用,但文檔仍然不夠完善 |
NetBeans 6.9 | JDK 6,Windows,Mac OS X,Linux | 免費 | 一款優秀的,易於使用的完整IDE,支持除Java外的許多程式語言,其插件沒有Eclipse多,功能沒有IntelliJ IDEA完善 |
Oracle JDeveloper Studio 11g | JDK 6,Windows,Mac OS X,Linux | 免費 | 一個穩定的,閉源的Java IDE,良好的企業級開發支持,和Oracle其它產品結合緊密,插件數量很少,幾乎都是官方提供的 |
其它IDE
為什麼有這麼多廠商和開源愛好者為Java編寫IDE仍然是個迷,之前我們曾介紹了9款Python開發工具,Java IDE領域也毫不示弱,但Java已經很成熟了,因此現在已經很少出現新的IDE,下面這些曾經資深的開發環境都面臨退役了。
Embarcadero JBuilder:目前該產品的最近一個更新版本還是JBuilder 2008,根據Embarcadero公司的發言人表示,2008年從Borland公司買下其IDE產品線後,改名為CodeGear了,鑑於公司還在開發其它IDE,如Delphi,因此可以認為JBuilder已經走到了生命的盡頭。
Genuitec MyEclipse:MyEclipse是一個基於Eclipse,捆綁了一組插件的訂閱產品,前面我們曾提到,Eclipse插件的尋找,安裝和管理都很繁瑣,而MyEclipse正是為此而生,Genuitec也開發一些自己獨有的插件,MyEclipse的訂閱價格每年從$32-$199不等,包括技術支持費用。
IBM Rational Application Developer:這個IDE(即著名的RAD)是IBM推出的一系列開發環境中的一部分,RAD和它的兄弟們都是基於Eclipse構建的,簡而言之就是在Eclipse基礎上換了一張皮,加入了一些自己的東西,如架構師版本提供了UML建模工具,商業開發版本支持IBM的4GL等,如果你在使用WebSphere,這些工具的威力就可以顯示出來了,但大多數功能和MyEclipse及其他免費的IDE並沒有多大區別。