Eclipse是一個流行的針對java編程的集成開發環境(IDE)。它還可以用作編寫其他語言(比如C++和Ruby)的環境,合并各種種類工具的框架,以及創建桌面或服務器應用程序的富客戶端平臺。如今,Eclipse開源社區擁有數十個項目,其范圍從商務智能到社會網絡等各個方面。Eclipse同時也是治理這些項目的非贏利性組織的名稱。(而且,盡管我相當肯定它并非地板蠟,還是存在Eclipse汽車、足球隊和口香糖。)
Eclipse version 3.2在Eclipse Callisto 發行歷史上具有里程碑的意義:于2006年6月30日同時發布了10個Eclipse項目。本文將集中探討Eclipse IDE,非凡是其Java 開發工具 (JDT)。
JDT構成
JDT的歷史可以追溯到1996年左右使用Smalltalk編寫的Visual Age for Java(VAJ)。在VAJ中,一切內容都會在輸入時進行編譯,并在內存中完全解析。這種設計的可伸縮性不是很好,難于擴展,重建文件也有一定的困難。
1999年,該IDE團隊開始開發Visual Age Micro Edition(VAME)。這個工具完全以Java編寫,并使用標準Widget 工具箱(SWT)來實現其用戶接口。當時的VAME將目標定為嵌入式空間中的開發與應用。為此,它使用了標準的Java VM,并把工作區保存在文件系統中。然而,文件和文件夾名稱都是一些無法讀取的UUID。
與VAJ提供的編譯器相比,VAME的增量式編譯器快了近10倍。該模型是基于狀態構建的(與目前的Eclipse相反,Eclipse是基于源代碼的)。VAME有自己的存儲庫系統Rapier,并且可以使用插件對其進行擴展。
VAME實際上并沒有在社區中流行開來,但是它包含了大量優秀的思路,開發人員在接下來的Eclipse項目中延用了這些思路。2001年,Eclipse 1.0發布。它被描述為“一種通用的IDE,并不非凡針對于什么內容”。一開始,Eclipse和JDT都被構建為其他開發工具使用的平臺。工作區保存在磁盤上,并對其他工作區開放。Eclipse 1.0集成了CVS,而沒有使用專用的存儲庫。
Eclipse與其先行者之間有一個重要的區別:它是開源的。其用戶社區以爆炸式的速度增長,并可獨立維持。Eclipse 3.2的大部分新的和改進功能都源自eclipse用戶提出的增強要求。自從3.1版本以來,已經有超過30,000個修復和增強的要求得到了解決。由于要把全部這些要求都過一遍需要很長時間,下面我們就重點講述其中一些對于大多數Java開發人員非凡重要的要求。
Eclipse編譯器
JDT更為強大的功能之一即是它內置的增量式Java編譯器,這個編譯器與javac完全兼容。盡管可以讓Eclipse使用Ant和javac,甚至可以讓問題標志顯示在IDE中(此為3.2版本中的新功能),但是Eclipse編譯器可以提供更好的診斷技術和更快的周轉周期。
JDT編譯器原本是為VAME而編寫的,后針對Eclipse進行了修改。這個編譯器構建在開發人員稱之為“編譯的3大規則”(模擬了阿西莫夫的機器人3大定律)之上:
·正確性:編譯器不能傷害源程序。
·高效性:編譯器必須快速,除非速度與規則1發生沖突。
·友好性:編譯器必須幫助用戶糾正編程錯誤,只要這類幫助不與規則1和規則2沖突。
·正確性:設計Java編譯器時,不僅必須遵循相應的規范,而且必須領會該規范的“精神”,僅僅考慮正確性是不行的。因此,JDT開發人員多年來辛勤工作,以便與其他編譯器的功能保持一致,其中包括Sun的編譯器。在Eclipse 3.2中,僅針對正確性的檢查就超過了15,000次單元測試(相比之下,VAJ中根本沒有進行單元測試)。
·高效性:數千個項目和數百萬行代碼往往是很平常的事情。這意味著要解決很多問題,例如內存使用必須是可猜測的并加以分級。Eclipse 3.2繼續對此進行積極的優化。例如,開發人員可以重寫一個流程圖以使用位操作,結果位操作的時間消耗從20%降到了4%。
·友好性:報告錯誤是一門藝術。僅僅使用行號還不夠。二級錯誤被最小化。例如,假如一個文件內漏掉了一個分號,它不會影響到與它相關的其他文件。改進后的靜態分析功能有助于發現錯誤模式。另外,Eclipse還可以對Javadoc進行正確性檢查。
就3.2版本來說,Eclipse編譯器是與Java SE 6.0兼容的。沒錯,Eclipse支持Java 6類和StackMapTable屬性(甚至在Java 6發布之前)。另外,該編譯器還提供大量新的診斷功能,有助于在運行代碼之前發現其中的錯誤。與3.2版本的編譯器(提供了45種診斷功能)相比,VAJ僅提供了3類診斷功能。最新的一些診斷功能包括對以下內容的檢測:
·使用顯然是null的變量。
·不必要的null檢查。
·對方法參數的偶然賦值。
·通過讓之前的大小寫狀態失效的方式,切換大小寫輸入。
·使用非一般(原始)類型。
·未使用的標簽。
·不必要的-NLS
在默認情況下,大多數這些功能都處于關閉狀態。當然,還可以使用注釋把它們設置為關閉狀態。
從3.2版本開始,假如想在Eclipse外部使用Eclipse編譯器,您可以單獨下載該版本。它的命令行參數與javac兼容,并且下載文件大小僅有1MB左右。既然Eclipse編譯器是開源的,所以許多其它項目(例如Apache Tomcat)就可以把它綁定到它們自己的軟件中。
新聞熱點
疑難解答