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