編者注:本文更新版本“Eclipse 平台入門” 2008 年 8 月發表。此最初版本將保留下來供大家參考。要了解 Eclipse 的最新功能,請閱讀新文章。
Eclipse 是什麼?
Eclipse 是一個開放源代碼的、基於 Java 的可擴展開發平台。就其本身而言,它只是一個框架和一組服務,用於通過插件組件構建開發環境。幸運的是,Eclipse 附帶了一個標准的插件集,包括 Java 開發工具(Java Development Tools,JDT)。
雖然大多數用戶很樂於將 Eclipse 當作 Java IDE 來使用,但 Eclipse 的目標不僅限於此。Eclipse 還包括插件開發環境(Plug-in Development Environment,PDE),這個組件主要針對希望擴展 Eclipse 的軟件開發人員,因為它允許他們構建與 Eclipse 環境無縫集成的工具。由於 Eclipse 中的每樣東西都是插件,對於給 Eclipse 提供插件,以及給用戶提供一致和統一的集成開發環境而言,所有工具開發人員都具有同等的發揮場所。
這種平等和一致性並不僅限於 Java 開發工具。盡管 Eclipse 是使用 Java 語言開發的,但它的用途並不限於 Java 語言;例如,支持諸如 C/C++、COBOL 和 Eiffel 等編程語言的插件已經可用,或預計會推出。Eclipse 框架還可用來作為與軟件開發無關的其他應用程序類型的基礎,比如內容管理系統。
基於 Eclipse 的應用程序的突出例子是 IBM 的 WebSphere Studio Workbench,它構成了 IBM Java 開發工具系列的基礎。例如,WebSphere Studio Application Developer 添加了對 JSP、servlet、EJB、XML、Web 服務和數據庫訪問的支持。
Eclipse 是開放源代碼的軟件
開放源代碼軟件是這樣一種軟件,它們在發布時附帶了旨在確保將某些權利授予用戶的許可證。當然,最明顯的權利就是源代碼必須可用,以便用戶能自由地修改和再分發該軟件。這種用戶權利的保護是通過一種稱為 copyleft的策略來完成的:軟件許可證主張版權保護,除非明確授予用戶這樣的權利,否則用戶不得分發該軟件。copyleft 還要求同一許可證涵蓋任何被再分發的軟件。這實際上倒置了版權的目的——使用版權來授予用戶權利,而不是為軟件的開發者保留版權——copyleft 經常被描述為“保留所有版權”。
曾經四處蔓延的對開放源代碼軟件的許多恐懼、擔憂和疑慮,都與某些 copyleft 許可證的所謂“病毒”性質有關——如果使用開放源代碼軟件作為您開發的程序的一部分,您將失去自己的知識產權,因為該許可證將“傳染”您開發的專有部分。換句話說,該許可證可能要求與開放源代碼軟件一起打包的所有軟件,都必須在相同的許可證之下發布。雖然這對最著名的 copyleft 許可證(即 GNU 通用公共許可證,例如 Linux 就是在該許可證之下發布的)來說可能是事實,當時還有其他許可證在商業化和社區考慮之間提供了較好的平衡。
開放源代碼計劃(Open Software Initiative)是一家非營利機構,它明確定義了開放源代碼的含義及滿足其標准的認證許可證。Eclipse 是在 OSI 認可的通用公共許可證(CPL)1.0 版之下被授予許可證的,CPL“旨在促進程序的商業化使用……”(欲獲得指向通用公共許可證 1.0 版完整文本的鏈接,請參閱本文稍後的 參考資料)。
為 Eclipse 創建插件或將 Eclipse 用作軟件開發應用程序基礎的開發人員,需要發布他們在 CPL 下使用或修改的任何 Eclipse 代碼,但是他們可以自由決定自己添加的代碼的許可證授予方式。與出自 Eclipse 的軟件一起打包的專有代碼不需要作為開放源代碼來授予許可證,該源代碼也不需要提供給用戶。
盡管大多數開發人員不會使用 Eclipse 來開發插件,或創建基於 Eclipse 的新產品,但是 Eclipse 的開放源代碼性質所意味的,並不只是它使得 Eclipse 免費可用(盡管便於商業化的許可證意味著插件可能要花錢)。開放源代碼鼓勵創新,並激勵開發人員(甚至是商業開發人員)為公共開放源代碼庫貢獻代碼。對此存在許多原因,不過最本質的原因或許是為這個項目作貢獻的開發人員越多,這個項目就會變得對每個人都越寶貴。隨著這個項目變得更加有用,更多的開發人員將會使用它,並圍繞它形成一個社區,就像那些圍繞 Apache 和 Linux 形成的社區一樣。
Eclipse 是什麼機構?
Eclipse.org 協會管理和指導 Eclipse 正在進行中的開發。在據說 IBM 花了 4000 萬美元開發 Eclipse,並把它作為一個開放源代碼項目發布之後,Eclipse.org 協會吸收了許多軟件工具提供商,包括 Borland、Merant、Rational、RedHat、SuSE、TogetherSoft 和 QNX。從那以後還有其他公司相繼加入,包括 Hewlett Packard、Fujitsu、Sybase。這些公司分別向理事會派了一名代表,這個理事會負責確定 Eclipse 項目的方向和范圍。
在最高層,項目管理委員會(Project Management Committee,PMC)管理著 Eclipse 項目。這個項目被劃分為多個子項目,每個子項目都有一名負責人。大型子項目又被劃分為組,每個組也有一名負責人。目前,這其中的大多數管理角色都由最初開發 Eclipse 的 IBM 子公司 Object Technology International (OTI)的人擔任,但是作為一個開放源代碼的項目,它歡迎任何人的參與。任何特定部門的職責是通過該部門對項目的貢獻來爭取的。
現在我們已經考察了 Eclipse 背後的一些理論、歷史和管理,下面讓我們考察該產品本身。
Eclipse 工作台
在第一次打開 Eclipse 時,首先看到的是下面的歡迎屏幕:
圖 1. Eclipse 工作台
Eclipse 工作台由幾個稱為 視圖(view)的窗格組成,比如左上角的 Navigator 視圖。窗格的集合稱為 透視圖(perspective)。默認的透視圖是 Resource 透視圖,它是一個基本的通用視圖集,用於管理項目以及查看和編輯項目中的文件。
Navigator 視圖允許您創建、選擇和刪除項目。Navigator 右側的窗格是 編輯器區域。取決於 Navigator 中選定的文檔類型,一個適當的編輯器窗口將在這裡打開。如果 Eclipse 沒有注冊用於某特定文檔類型(例如,Windows 系統上的 .doc 文件)的適當編輯器,Eclipse 將設法使用外部編輯器來打開該文檔。
Navigator 下面的 Outline 視圖在編輯器中顯示文檔的大綱;這個大綱的准確性取決於編輯器和文檔的類型;對於 Java 源文件,該大綱將顯示所有已聲明的類、屬性和方法。
Tasks 視圖收集關於您正在操作的項目的信息;這可以是 Eclipse 生成的信息,比如編譯錯誤,也可以是您手動添加的任務。
該工作台的大多數其他特性,比如菜單和工具欄,都應該和其他那些熟悉的應用程序類似。一個便利的特性就是不同透視圖的快捷方式工具欄,它顯示在屏幕的左端;這些特性隨上下文和歷史的不同而有顯著差別。Eclipse 還附帶了一個健壯的幫助系統,其中包括 Eclipse 工作台以及所包括的插件(比如 Java 開發工具)的用戶指南。至少浏覽一遍這個幫助系統是值得的,這樣可以看到有哪些可用的選項,同時也可更好地理解 Eclipse 的工作流程。
為繼續這個短暫的 Eclipse 之旅,我們將在 Navigator 中創建一個項目。右鍵單擊 Navigator 視圖,然後選擇 New=>Project。當 New Project 對話框出現時,選擇左面的 Java。標准 Eclipse 只有一種 Java 項目類型,名為“Java Project”。如果安裝了插件來提供 JSP 和 servlet 支持,我們會從這裡看到一個用於 Web 應用程序的附加選項。眼下,請選擇 Java Project,在提示項目名稱時輸入“Hello”,然後按 Finish。
接下來,我們將檢查一下 Java 透視圖。取決於您喜歡的屏幕管理方式,您可以通過選擇 Window=>Open Perspective=>Java來改變當前窗口中的透視圖,也可以通過選擇 Window=>New Window,然後再選擇這個新的透視圖,從而打開一個新的窗口。
正如您可能預期的那樣,Java 透視圖包含一組更適合於 Java 開發的視圖。其中之一就是左上角的視圖,它是一個包含各種 Java 包、類、jar 和其他文件的層次結構。這個視圖稱為 Package Explorer。還要注意主菜單已經展開了——並且出現了兩個新的菜單項:Source 和 Refactor。
Java 開發環境(JDE)
為試驗一下 Java 開發環境,我們將創建並運行一個“Hello, world”應用程序。使用 Java 透視圖,右鍵單擊“Hello”項目,選擇 New=>Class,如圖 2 所示。在隨後出現的對話框中,鍵入“Hello”作為類名稱。在“Which method stubs would you like to create?”下面,選中“public static void main(String[] args)”復選框,然後按 Finish。
圖 2. 在 Java 透視圖中創建新類
這樣將在編輯器區域創建一個包含 Hello 類和空的 main() 方法的 .java 文件,如圖 3 所示。然後向該方法添加如下代碼(注意其中 i 的聲明是有意省略了的):
圖 3. Java 編輯器中的 Hello 類
您會在鍵入時注意到 Eclipse 編輯器的一些特性,包括語法檢查和代碼自動完成。在 2.1 版(我曾下載 M2 版來試用過)中,當您鍵入開括號或雙引號時,Eclipse 會自動提供配對的符號,並將光標置於符號對之內。
在其他情況下,您可以通過按 Ctrl-Space 來調用代碼自動完成功能。代碼自動完成提供了上下文敏感的建議列表,您可通過鍵盤或鼠標來從列表中選擇。這些建議可以是針對某個特定對象的方法列表,也可以是基於不同的關鍵字(比如 for 或 while )來展開的代碼片斷。
語法檢查依賴增量編譯。每當您保存代碼,它就在後台接受編譯和語法檢查。默認情況下,語法錯誤將以紅色下劃線顯示,一個帶白 “X” 的紅點將出現在左邊沿。其他錯誤在編輯器的左邊沿通過燈泡狀的圖標來指示;這些就是編輯器或許能為您修復的問題——即所謂的Quick Fix(快速修復)特性。
上面的代碼例子在 for 語句後面有一個燈泡狀圖標,因為 i 的聲明被省略了。雙擊該圖標將調出建議的修復列表。在此例中,它將提供創建一個類字段 i 、一個局部變量 i 或一個方法參數 i 的建議;單擊其中的每一個建議都會顯示將要生成的代碼。圖 4 顯示了該建議列表和建議創建一個局部變量之後生成的代碼。
圖 4. Quick Fix 建議
雙擊該建議就會把建議代碼插入到代碼中的恰當位置。
一旦代碼無錯誤地編譯完成,您就能夠從 Eclipse 菜單上選擇 Run 來執行該程序(注意這裡不存在單獨的編譯步驟,因為編譯是在您保存代碼時進行的。如果代碼沒有語法錯誤,它就可以運行了)。這時會出現一個具有適當默認設置的 Launch Configurations 對話框;請按右上角的 Run 按鈕。一個新的選項卡式窗格將出現在下面的窗格(控制台)中,其中顯示了程序的輸出,如圖 5 所示。
圖 5. 程序的輸出
也可以在 Java 調試器中運行程序。首先雙擊編輯器視圖左端的灰色邊沿,從而在調用 System.out.println() 之後的 main() System.out.println() 中設置一個斷點。一個藍色的點將會出現在那裡。然後從 Run 菜單上選擇 Debug。正如上面描述的,這時會出現一個 Launch Configurations 對話框。請選擇 Run。透視圖將自動切換到 Debug 透視圖,其中具有許多有趣的新視圖,如圖 6 所示:
圖 6. Debug 透視圖
首先,請注意該透視圖左上角的 Debug 視圖。這個視圖顯示調用堆棧,並且標題欄中有一個工具欄,它允許您控制程序的執行,包括繼續、掛起或終止程序、跟蹤下一個語句、單步執行下一個語句,或者從方法返回。
右上角的窗格包含許多選項卡式的視圖,包括 Variables、Breakpoints、Expressions 和 Display。這裡我單擊了 Variables 視圖,以便我們能夠看到 i 的當前值。
可以通過上下文敏感的幫助,獲得關於這些視圖的更多信息:單擊視圖的標題,然後按 F1。
附加插件
除了像 JDT 這樣用於編輯、編譯和調試應用程序的插件外,還有些可用的插件支持從建模、生成自動化、單元測試、性能測試、版本控制到配置管理的完整開發過程。
Eclipse 標准地附帶了配合 CVS 使用的插件,CVS 是用於源代碼控制的開放源代碼並發版本系統(Concurrent Versions System)。Team 插件連接到 CVS 服務器,允許開發團隊的成員操作一組源代碼文件,卻不會相互覆蓋其他人的更改。這裡不打算進一步探討如何從 Eclipse 內部進行源代碼控制,因為這需要安裝 CVS 服務器,不過支持開發團隊而不只是獨立的開發,這是 Eclipse 的一個重要的必備特性。
已經可用或已宣布要推出的一些第三方插件包括:
版本控制和配置管理
CVS
Merant PVCS
Rational ClearCase
UML 建模
OMONDO EclipseUML
Rational XDE (代替 Rose)
Together WebSphere Studio Edition
圖形
Batik SVG
Macromedia Flash
Web 開發、HTML、XML
Macromedia Dreamweaver
XMLBuddy
應用服務器集成
Sysdeo Tomcat launcher
例子:一個用於 UML 建模的插件
要查看插件的例子,以及查看它是如何與 Eclipse 集成的,請下載流行的 OMONDO EclipseUML(參閱 參考資料中的鏈接);您需要注冊,不過該插件是免費的。這個插件依賴 GEF,即 Graphical Editor Framework,這是另一個 Eclipse 插件。GEF 是 Tools 子項目的一部分。要下載 GEF,請轉到 Eclipse Web 站點(參閱 參考資料),選擇“downloads”,然後單擊“Tools PMC downloads page”鏈接。注意您需要下載 OMONDO 推薦的 GEF 版本(針對 OMONDO 1.0.2 的是 GEF 2.0 版)。
下載之後,插件的安裝通常是通過解壓縮下載文件,並將其內容復制到 Eclipse 插件目錄來完成的。在此例中,GEF 需要解壓縮到 Eclipse目錄(它將自動從該目錄進入插件目錄)。為安全起見,您可能想將它解壓縮到某個臨時目錄,再相應地從那裡復制相關目錄。如果 Eclipse 正在運行,您需要停止它然後再重新啟動它,這樣它才能識別新安裝的插件。
一旦 EclipseUML(以及 GEF)安裝完成,您就能夠像創建一個 Java 類文件一樣創建一個類圖。在 Java 透視圖中,右鍵單擊 Package Explorer 中的“Hello”項目,然後從彈出菜單上選擇 New=>Other。New 對話框的左邊窗格中將會有一個用於 UML 的新選項。EclipseUML 的免費版本僅支持類圖,因此右側的惟一選項是 UML Class Diagram。請選擇 UML Class Diagram,然後為該類圖鍵入一個名稱,比如“Hello”:
圖 7. Class Diagram 編輯器
編輯器區域中將會出現一個圖形編輯器,它帶有用於繪制類圖的畫布。您可以通過兩種方式創建類圖:通過將 Java 文件從 Package Explorer 拖放到類圖上,從而對現有代碼進行逆向工程;或者使用空白類圖上面工具欄中可用的繪制工具。要試驗第一種方法,請創建一個名為 Person 的新類(使用 File=>New=>Class),然後賦予它下面列出的兩個私有屬性:
/** Person.java
* @author david
*/
public class Person {
private String name;
private Address address;
/**
* Returns the address.
* @return Address
*/
public Address getAddress() {
return address;
}
/**
* Returns the name.
* @return String
*/
public String getName() {
return name;
}
/**
* Sets the address.
* @param address The address to set
*/
public void setAddress(Address address) {
this.address = address;
}
/**
* Sets the name.
* @param name The name to set
*/
public void setName(String name) {
this.name = name;
}
}
(應該承認,我僅鍵入了針對 name 和 address 的行。getter 和 setter 方法是通過 Eclipse 自動生成的,即右鍵單擊源代碼,然後從彈出菜單上選擇 Source=>Generate Getter and Setter。)
請保存並關閉 Person.java Hello.ucd。
圖 8. Person 類圖
要從 UML 創建 Java 類,請單擊類圖窗口頂部工具欄上的“New class”按鈕,即左起第三個按鈕,然後單擊類圖。當 New 類向導打開時,請鍵入 Adress 作為類名稱,然後按 Finish。
您可以右鍵單擊類名稱並選擇 New=>Attribute,從而給類添加屬性。在 New 屬性對話框中,請輸入屬性名稱、類型和可見性。然後右鍵單擊類名稱並選擇 New=>Method來添加方法。
當您更改類圖時,圖下面的 Source Editor 窗口將反映所做的更改。最後,您可以單擊 Association 按鈕(左起第五個),繪制一條從 Person 類指向 Address 類的線段,從而繪制這兩個類之間的關系圖。這樣會調出另外一個對話框,您可以在其中輸入關聯屬性(請參考 EclipseUML 幫助,以了解關於必需信息的更多內容)。完成後的圖應該類似如下:
圖 9. 關聯
這個 UML 插件展示了 Eclipse 插件的幾個典型特點。首先,它展示了工具之間的緊密集成。表面上絕對無法看出有多個組件在工作;與 Eclipse 平台和 JDT 的集成是無縫的。例如,當 Person 類被創建時,它顯示語法錯誤是因為它的一個屬性 Address 沒有定義。一旦 Address 類在 UML 圖中創建完成,這些組件就會分開顯示出來。
另一個特點是 EclipseUML 利用其他插件提供的功能的能力——在此例中是 GEF 插件,它提供用於開發可視化編輯器的工具。
還有另一個特點涉及 EclipseUML 插件使用多層次功能來分發的方式。支持類圖的基本插件是免費的,但是更成熟的版本要付費才能使用。
Eclipse 平台體系結構
Eclipse 平台是一個具有一組強大服務的框架,這些服務支持插件,比如 JDT 和插件開發環境(PDE)。它由幾個主要的部分構成:平台運行庫、工作區、工作台、團隊支持和幫助。
圖 10. Eclipse 平台體系結構
平台
平台運行庫是內核,它在啟動時檢查已安裝了哪些插件,並創建關於它們的注冊表信息。為降低啟動時間和資源使用,它在實際需要任何插件時才加載該插件。除了內核外,其他每樣東西都是作為插件來實現的。
工作區
工作區是負責管理用戶資源的插件。這包括用戶創建的項目、那些項目中的文件,以及文件變更和其他資源。工作區還負責通知其他插件關於資源變更的信息,比如文件創建、刪除或更改。
工作台
工作台為 Eclipse 提供用戶界面。它是使用標准窗口工具包(SWT)和一個更高級的 API(JFace)來構建的;SWT 是 Java 的 Swing/AWT GUI API 的非標准替代者,JFace 則建立在 SWT 基礎上,提供用戶界面組件。
SWT 已被證明是 Eclipse 最具爭議的部分。SWT 比 Swing 或 SWT 更緊密地映射到底層操作系統的本機圖形功能,這不僅使得 SWT 更快速,而且使得 Java 程序具有更像本機應用程序的外觀和感覺。使用這個新的 GUI API可能會限制 Eclipse 工作台的可移植性,不過針對大多數流行操作系統的 SWT 移植版本已經可用。
Eclipse 對 SWT 的使用只會影響 Eclipse 自身的可移植性——使用 Eclipse 構建的任何 Java 應用程序都不會受到影響,除非它們使用 SWT 而不是使用 Swing/AWT。
團隊支持
團隊支持組件負責提供版本控制和配置管理支持。它根據需要添加視圖,以允許用戶與所使用的任何版本控制系統(如果有的話)交互。大多數插件都不需要與團隊支持組件交互,除非它們提供版本控制服務。
幫助
幫助組件具有與 Eclipse 平台本身相當的可擴展能力。與插件向 Eclipse 添加功能相同,幫助提供一個附加的導航結構,允許工具以 HTML 文件的形式添加文檔。
Eclipse 的前景
圍繞 Eclipse 的開發正處於關鍵階段。主要軟件工具提供商都參與進來了,並且開放源代碼 Eclipse 插件項目的數量正在與日俱增。
可移植、可擴展、開放源代碼的框架並不是個新思想(您會想起 Emacs),但是由於它成熟、健壯和優雅的設計,Eclipse 帶來了全新的動力。IBM 價值 4000 萬美元的世界級軟件在開放源代碼領域的發布,給業界帶來了久違的震撼。