Eclipse入門使用指南及開發(fā)Eclipse插件(1)
2001 年11 月 IBM 宣布捐出了價(jià)值 4 千萬(wàn)美金的開發(fā)軟件給開放源碼的 Eclipse 項(xiàng)目。如此受青睞的 Eclipse 是什么樣子呢,如何使用呢?本文的第一部分會(huì)使你對(duì)Eclipse有一個(gè)初步的認(rèn)識(shí)。并且,Eclipse這個(gè)號(hào)稱未來(lái)能進(jìn)行任何語(yǔ)言開發(fā)的IDE集大成者,又將如何實(shí)現(xiàn)它的這一宏偉目標(biāo)?第二部分介紹的Eclipse的插件開發(fā)將是其中的關(guān)鍵所在。
Eclipse 是替代IBM Visual Age for Java(以下簡(jiǎn)稱IVJ)的下一代IDE開發(fā)環(huán)境,但它未來(lái)的目標(biāo)不僅僅是成為專門開發(fā)Java程序的IDE環(huán)境,根據(jù)Eclipse的體系結(jié)構(gòu),通過(guò)開發(fā)插件,它能擴(kuò)展到任何語(yǔ)言的開發(fā),甚至能成為圖片繪制的工具。目前,Eclipse已經(jīng)開始提供C語(yǔ)言開發(fā)的功能插件。更難能可貴的是,Eclipse是一個(gè)開放源代碼的項(xiàng)目,任何人都可以下載Eclipse的源代碼,并且在此基礎(chǔ)上開發(fā)自己的功能插件。也就是說(shuō)未來(lái)只要有人需要,就會(huì)有建立在Eclipse之上的COBOL,Perl,Python等語(yǔ)言的開發(fā)插件出現(xiàn)。同時(shí)可以通過(guò)開發(fā)新的插件擴(kuò)展現(xiàn)有插件的功能,比如在現(xiàn)有的Java開發(fā)環(huán)境中加入Tomcat服務(wù)器插件。可以無(wú)限擴(kuò)展,而且有著統(tǒng)一的外觀,操作和系統(tǒng)資源管理,這也正是Eclipse的潛力所在。
雖然目前Eclipse項(xiàng)目還沒(méi)有最后完成,但從已有的版本中已經(jīng)能領(lǐng)略到Eclipse設(shè)計(jì)主導(dǎo)思想和主要功能特點(diǎn)?,F(xiàn)在就了解Eclipse不但能使廣大程序員對(duì)這款業(yè)界期望很高的IDE能一睹為快,更為重要的是如果能參加到Eclipse項(xiàng)目的開發(fā)中或是閱讀它的開放源代碼,這對(duì)廣大程序員來(lái)說(shuō)無(wú)疑是一個(gè)千載難逢的提高編程水平的好機(jī)會(huì)。Eclipse計(jì)劃提供多個(gè)平臺(tái)的版本,象Windows,Linux,Solaris,HP-UX和AIX,以下只介紹Windows版本。本文第一部分先介紹Eclipse的基本使用方法。第二部分介紹如何進(jìn)行Eclipse的插件開發(fā)。
一.Eclipse簡(jiǎn)介
Eclipse是開放源代碼的項(xiàng)目,你可以到www.eclipse.org去免費(fèi)下載Eclipse的最新版本,一般Eclipse提供幾個(gè)下載版本:Release,Stable Build,Integration Build和Nightly Build,建議下載Release或Stable版本,筆者用的是Build20020125(Stable版本)。Eclipse本身是用Java語(yǔ)言編寫,但下載的壓縮包中并不包含Java運(yùn)行環(huán)境,需要用戶自己另行安裝JRE,并且要在操作系統(tǒng)的環(huán)境變量中指明JRE中bin的路徑。安裝Eclipse的步驟非常簡(jiǎn)單:只需將下載的壓縮包按原路徑直接解壓既可。
需注意如果有了更新的版本,要先刪除老的版本重新安裝,不能直接解壓到原來(lái)的路徑覆蓋老版本。在解壓縮之后可以到相應(yīng)的安裝路徑去找Eclipse.exe運(yùn)行。如果下載的是Release或Stable版本,并且JRE環(huán)境安裝正確無(wú)誤,一般來(lái)說(shuō)不會(huì)有什么問(wèn)題,在閃現(xiàn)一個(gè)很酷的月蝕圖片后,Eclipse會(huì)顯示它的缺省界面,乍一看起來(lái),Eclipse的界面有點(diǎn)象JBilder,但實(shí)際操作進(jìn)程中會(huì)發(fā)現(xiàn)它更象IVJ,畢竟開發(fā)Eclipse的主導(dǎo)用量是開發(fā)IVJ的原班人馬(可參考www.oti.com)。另外還值得一提的是Eclipse項(xiàng)目的參預(yù)者除了IBM以外,還有象Borland,Rational Software,RedHat,Merant等一大批業(yè)界的姣姣者,這也為Eclipse的未來(lái)奠定了良好的基礎(chǔ)。下面將分別對(duì)Eclipse的各種特性作簡(jiǎn)單介紹,包括:文件存放,開發(fā)環(huán)境,編譯與運(yùn)行,版本管理,使用插件。
1. 文件存放
大多IVJ的初學(xué)者都對(duì)找不到Java源代碼感到非常不適應(yīng),因?yàn)镮VJ把所有的源代碼都存儲(chǔ)到一個(gè)reponsitory庫(kù)文件中,想要得到文本格式的源代碼必須用Export功能從reponsitory中導(dǎo)出源代碼。使用了reponsitory的IVJ對(duì)源代碼的管理功能幾乎達(dá)到極致,正是這一點(diǎn)使得許多程序員對(duì)IVJ鐘愛(ài)有加。而Eclipse將源代碼以文本方式保存,卻實(shí)現(xiàn)了IVJ對(duì)源代碼管理的幾乎全部功能,并且還增加了一些新的功能,能達(dá)到這一點(diǎn),不能不驚嘆于Eclipse開發(fā)者的高超技巧。
安裝Eclipse之后,在安裝路徑的下一層路徑中會(huì)有一個(gè)workspace文件夾。每當(dāng)在Eclipse中新生成一個(gè)項(xiàng)目,缺省情況下都會(huì)在workspace中產(chǎn)生和項(xiàng)目同名的文件夾以存放該項(xiàng)目所用到的全部文件。你可以用Windows資源管理器直接訪問(wèn)或維護(hù)這些文件。
將已有的文件加入到一個(gè)項(xiàng)目中目前有三種方式:第一種是象在IVJ中的一樣,用IDE的"File"菜單中的"Import"功能將文件導(dǎo)入到項(xiàng)目中。這也是推薦的方式。第二種是從Windows的資源管理器中直接拖動(dòng)文件到項(xiàng)目中。第三種就是直接將文件拷貝到項(xiàng)目文件夾中,然后在Eclipse的資源瀏覽窗口中選擇項(xiàng)目或文件夾并執(zhí)行從本地刷新功能(Refresh from locate)。需要說(shuō)明的一點(diǎn)是,項(xiàng)目文件夾可以放在計(jì)算機(jī)的任何位置,并且可以在Eclipse中用新建項(xiàng)目的方法將項(xiàng)目路徑指定到已經(jīng)存在的項(xiàng)目文件夾,然后在Eclipse中刷新即可。但要注意的是,任何項(xiàng)目文件夾建立或指定,目前都只能在Eclipse中用新建項(xiàng)目的方法來(lái)實(shí)現(xiàn),即使是在缺省存儲(chǔ)項(xiàng)目文件夾的workspace路徑下新建立一個(gè)文件夾,在Eclipse環(huán)境中也是無(wú)法將它變成一個(gè)項(xiàng)目,也就是說(shuō),這個(gè)文件夾對(duì)Eclipse是不可視的。(未完待續(xù))
2. Eclipse開發(fā)環(huán)境
和IVJ一樣,Eclipse開發(fā)環(huán)境被稱為Workbench,它主要由三個(gè)部分組成:視圖(Perspective),編輯窗口(Editor)和觀察窗口(View)。在下面的介紹中,希望讀者能知道Java視圖,Java包瀏覽窗口,資源視圖,資源瀏覽窗口等區(qū)別(其實(shí)最主要的也就是要區(qū)別視圖和窗口),以免在進(jìn)一步的閱讀中產(chǎn)生混淆。Workbench包含多個(gè)視圖,而每個(gè)視圖又包含不同的窗口。由于每個(gè)編輯窗口有很大的共性,而且缺省情況它們都在同一區(qū)域中顯示,因此我們只在每個(gè)視圖中標(biāo)出一個(gè)編輯窗口,以綠色表示。觀察窗口則各不相同,這里以紅色表示。
下面首先介紹編輯窗口。所有文件的顯示和編輯都包含在編輯窗口里。缺省情況下打開的多個(gè)文件是以標(biāo)簽(TagTable)方式在同一個(gè)窗口中排列,可以用拖動(dòng)方式將這些文件排列成各種布局。方法是拖動(dòng)某一個(gè)文件的標(biāo)簽(tag)到編輯窗口的邊框,當(dāng)光標(biāo)有相應(yīng)的變化時(shí)再釋放。
當(dāng)文件被加入到項(xiàng)目中后,在資源瀏覽或Java包瀏覽窗口雙擊文件,Eclipse會(huì)試圖打開這個(gè)文件:其中Eclipse內(nèi)嵌的編輯器能缺省打開一些文件,如*.java,*.txt,*.class等等。如果是其它類型的文件,Eclipse會(huì)調(diào)用操作系統(tǒng)相應(yīng)的缺省編輯器打開,如word文檔,PDF文件等。同時(shí)Eclipse也可以象IVJ一樣用指定的編輯器打開相應(yīng)的文件。例如在Eclipse項(xiàng)目中雙擊HTML文件時(shí),可能希望是用Notepad打開,而不是用系統(tǒng)缺省的IE瀏覽器打開。實(shí)現(xiàn)的方法是打開菜單欄中的WorkBenchàPreferences對(duì)話框,之后在對(duì)話框中選擇WorkBenchàFile Editors,然后添加文件類型,如*.html,再為其指定編輯器即可。
在編輯窗口,還值得注意的是,習(xí)慣了IVJ的程序員在編輯Java程序的時(shí)候,更愿意以方法為獨(dú)立的編輯單位(即在編輯窗口中只顯示單個(gè)的方法,而不是程序全部的源代碼),這種方式也的確是非常合理的開發(fā)方式,不僅代碼的顯示更加簡(jiǎn)捷,還能輔助程序員編出封裝性更好的類。在Eclipse在工具欄上提供了一個(gè)切換按鈕,可以在"顯示全部代碼"和"只顯示所選單元"(這里的單元指的是單個(gè)方法、變量、導(dǎo)入的包等)之間切換。建議沒(méi)有使用過(guò)IVJ的程序員也嘗試一下在"只顯示所選單元"狀態(tài)下進(jìn)行代碼開發(fā)。
其次要介紹的是觀察窗口,它配合編輯窗口并提供了多種的相關(guān)信息和瀏覽方式。常用的觀察窗口有資源瀏覽窗口(Navigator),Java包瀏覽窗口(Packages),控制臺(tái)(Console),任務(wù)欄(Task)等等。
瀏覽窗口和Java瀏覽窗口是觀察窗口核心部分。前者和Windows的瀏覽器差不多,能瀏覽項(xiàng)目文件夾中的所有文件,后者用來(lái)瀏覽項(xiàng)目中的Java包,包中的類,類中的變量和方法等信息。在Java瀏覽窗口中可以通過(guò)用鼠標(biāo)右鍵的菜單中的Open Type Hierarchy打開層次瀏覽窗口(Hierarchy),這個(gè)窗口非常實(shí)用,它能非常清晰的查看類的層次結(jié)構(gòu)。類中的編譯出錯(cuò)信息可以在任務(wù)窗口中查到,同時(shí)它也可以成為名符其實(shí)的任務(wù)窗口:向其中添加新的任務(wù)描述信息,來(lái)跟蹤項(xiàng)目的進(jìn)度??刂婆_(tái)則主要用來(lái)顯示程序的輸出信息。在調(diào)試程序的時(shí)候,會(huì)有更豐富的觀察窗口來(lái)幫助程序員進(jìn)行調(diào)試,如變量值察看窗口,斷點(diǎn)窗口等等。
觀察窗口是任何IDE開發(fā)環(huán)境的核心,用好觀察窗口是也就是用好IDE開發(fā)環(huán)境。Eclipse提供了豐富的觀察窗口,能真正用好這些窗口恐怕要得經(jīng)過(guò)一段時(shí)間的磨練。
最后介紹視圖。一個(gè)視圖包括一個(gè)或多個(gè)編輯窗口和觀察窗口。在開發(fā)環(huán)境的最左側(cè)的快捷欄中的上部分顯示的就是當(dāng)前所打開的視圖圖標(biāo)。視圖是Eclipse的最靈活的部分,可以自定義每個(gè)視圖中包含的觀察窗口種類,也可以自定義一個(gè)新視圖。這些功能都被包括在"Perspective" 菜單中。在Eclipse的Java開發(fā)環(huán)境中提供了幾種缺省視圖,如資源視圖(Resource Perspective,它也是第一次啟動(dòng)Eclipse時(shí)的缺省視圖),Java視圖(Java Perspective),調(diào)試視圖(Debug Perspective),團(tuán)隊(duì)視圖(Team Perspective)等等。每一種視圖都對(duì)應(yīng)不同種類的觀察窗口??梢詮牟藛螜谥械腜erspectiveàShow View看到該視圖對(duì)應(yīng)的觀察窗口。當(dāng)然,每個(gè)視圖的觀察窗口都是可配置的,可以在菜單欄中的PerspectiveàCustomize進(jìn)行配置。多樣化的視圖不但可以幫助程序員以不同角度觀察代碼,也可以滿足不同的編程習(xí)慣。 (未完待續(xù))
3. 編譯與運(yùn)行
在IVJ中調(diào)試功能非常強(qiáng)大,多種跟蹤方式,斷點(diǎn)設(shè)置,變量值察看窗口等等。這些在Eclipse中都也有提供。在本文下面介紹插件的時(shí)候,會(huì)結(jié)合例子更加詳細(xì)的介紹如何使用配置項(xiàng)目環(huán)境,如何運(yùn)行和調(diào)試程序。
在Java視圖中,工具欄中有兩個(gè)按鈕,分別用來(lái)進(jìn)行調(diào)試和運(yùn)行。并且可能由于安裝的插件不同Eclipse會(huì)存在多種運(yùn)行/調(diào)試程序的方式,為了確定當(dāng)前項(xiàng)目用那一種方式運(yùn)行,需要在項(xiàng)目的屬性選項(xiàng)中的設(shè)置LauncheràRun/Debug選項(xiàng)。通常我們需要用的是"Java Applicantion"方式。在這種方式下,如果當(dāng)前位置是包含main()方法的Java程序,點(diǎn)擊調(diào)試/運(yùn)行按鈕就會(huì)立即開始執(zhí)行調(diào)試/運(yùn)行功能。如果當(dāng)前位置是在包或項(xiàng)目上,Eclipse會(huì)搜索出當(dāng)前位置所包含的所有可執(zhí)行程序,然后由程序員自己選擇運(yùn)行那一個(gè)。
在目前的Eclipse的Release和Stable版本中缺省安裝了插件開發(fā)環(huán)境(Plug-in Development Environment,即PDE,它本身也是一個(gè)插件),此時(shí)系統(tǒng)除了"Java Applicantion" 運(yùn)行方式,可能還有另外兩種方式:"Run-time WorkBench"和"Run-time WorkBench with Tracing",當(dāng)用PDE開發(fā)插件的時(shí)候會(huì)用到這兩種運(yùn)行方式,在下面我們也有提到。
4. 版本管理 可以把Eclipse的版本管理分為個(gè)人(或稱為本地)和團(tuán)隊(duì)兩種。Eclipse提供了強(qiáng)大的個(gè)人版本管理機(jī)制,每一次被保存的更改都可以得到恢復(fù)。而且可以精確到每一個(gè)方法的版本恢復(fù)。操作也十分方便,在任何一個(gè)能看到所要操作文件的觀察窗口中,例如資源瀏覽窗口,選中該文件,點(diǎn)擊右鼠標(biāo)鍵,選擇Compare with或Replace with,如果是恢復(fù)已經(jīng)被刪除的方法則可以選擇Add from local history,之后相應(yīng)的本地歷史記錄就會(huì)顯示出來(lái),按照你的需求找到相應(yīng)的版本就可以了。強(qiáng)大的個(gè)人版本管理功能為程序員提供了更多的信心!
Eclipse缺省為版本管理工具CVS提供了接口,可以非常方便的連接到CVS服務(wù)器上。通過(guò)CVS版本管理,Eclipse為團(tuán)隊(duì)開發(fā)提供良好的環(huán)境。要連接CVS服務(wù)器需要先打開團(tuán)隊(duì)視圖(Team Perspective),然后在Reponsitories觀察窗口中點(diǎn)擊鼠標(biāo)右鍵并選擇新建(New),在打開的對(duì)話框中可以填入要連接的CVS庫(kù)所需要的信息,如CVS服務(wù)器類型,目前Eclipse支持三種方式:pserver、extssh和ext,還要填入用戶名,主機(jī)名,密碼,reponsitory地址等信息。
在Eclipse中使用CVS需要注意的是一些術(shù)語(yǔ)和功能的變化,CVS中的Branch這里被稱為Stream,取消了CVS中check out、import和commit等功能,統(tǒng)統(tǒng)用鼠標(biāo)右鍵菜單中的Team->Synchronized with Stream來(lái)替代。這些功能都通過(guò)圖形界面完成,在每次操作中都會(huì)有當(dāng)前文件和以前各個(gè)版本的比較窗口,操作非常直觀,易于掌握,因此這里也就不再做進(jìn)一步介紹了。
5. 使用插件
使用插件可以豐富Eclipse的功能。下面將介紹如何應(yīng)用插件來(lái)嵌入Tomcat服務(wù)器。這個(gè)插件并不是Eclipse項(xiàng)目組開發(fā)的,而是一家叫sysdeo的公司開發(fā),非常小巧,只有27.8K。你可以到http://www.sysdeo.com/eclipse/tomcatPlugin.html去免費(fèi)下載。另外,這個(gè)插件只支持Tomat4.0以上的版本,可以在www.apache.org得到Tomcat的最新版本。
要安裝插件只需將下載的zip文件按原路徑解壓到"你的Eclipse的安裝路徑plugins"下面,然后重新啟動(dòng)Eclipse。啟動(dòng)后在菜單欄上選擇PerspectiveàCustomize,在打開的對(duì)話框中選中OtheràTomcat。之后馬上會(huì)發(fā)現(xiàn)Eclipse有了兩處變化:菜單欄中多了一個(gè)Tomcat選項(xiàng),工具欄中多了兩個(gè)按鈕,上面是大家可能非常熟悉的Tomcat小貓,如下圖三。除此之外,在菜單欄中選擇:WorkbenchàPreferences,打開對(duì)話框后會(huì)發(fā)現(xiàn)這也多了一個(gè)Tomcat選項(xiàng),在這里要求指定你的Tomcat安裝根路徑。之后還要檢查一下在Preferences對(duì)話框中的JavaàInstalled JRE所指定的JRE和啟動(dòng)Tomcat的JRE是否為同一個(gè)JRE,如果不是,可能會(huì)導(dǎo)致Tomat不能正常啟動(dòng)。如果以上檢查沒(méi)有問(wèn)題,就可以用工具欄上的"小貓"直接起動(dòng)Tomcat了。要注意的是,啟動(dòng)過(guò)程很慢,要耐心等到以下信息出現(xiàn):
Starting service Tomcat-Standalone
Apache Tomcat/4.0.1
Starting service Tomcat-Apache
Apache Tomcat/4.0.1
之后就可以在外部瀏覽器(如IE)中輸入http://localhost:8080來(lái)測(cè)試Tomcat是否正常。
Eclipse入門使用指南及開發(fā)Eclipse插件(4)
如果啟動(dòng)正常,可以進(jìn)一步嘗試在Eclipse中調(diào)試Servlet或JSP程序。下面我們將用Tomcat自帶的Servlet例程HelloWorldExample.java來(lái)示范一下如何在Eclipse中調(diào)試Sevlet程序。首先要在Java視圖中新建一個(gè)Java項(xiàng)目,為了方便,可以直接將項(xiàng)目路徑指定到HelloWorldExmaple程序所在路徑,之后按"Next",進(jìn)入Java Settings對(duì)話框,選擇Libraries標(biāo)簽,并用Add External JARs按鈕來(lái)指定Servlet.jar包的位置。這里直接用了Tomcat中的Servlet.jar包。
最后,點(diǎn)擊"Finish"完成項(xiàng)目的生成。在新生成項(xiàng)目中的default package可以找到HelloWorldExample.java,雙擊打開文件,并可嘗試給HelloWorldExample加上一個(gè)斷點(diǎn)(雙擊編輯窗口左側(cè)邊界)。之后在外部瀏覽器中輸入http://localhost:8080/examples/servlet/HelloWorldExample,再回過(guò)來(lái)看Eclipse發(fā)生了什么變化,是一個(gè)調(diào)試窗口呀!在Eclipse中進(jìn)行的調(diào)試操作和絕大多數(shù)的IDE大同小異,如設(shè)置斷點(diǎn),單步跟蹤,變量值察看等等,在這里也就不用再詳述了。
Eclipse最有魅力的地方就是它的插件體系結(jié)構(gòu)。在這個(gè)體系中重要的概念是擴(kuò)展點(diǎn)(extension points),也就是為插件提供的接口。每一個(gè)插件都是在現(xiàn)有的擴(kuò)展點(diǎn)上開發(fā),并可能還留有自己的擴(kuò)展點(diǎn),以便在這個(gè)插件上繼續(xù)開發(fā)。
由于有了插件,Eclipse系統(tǒng)的核心部分在啟動(dòng)的時(shí)候要完成的工作十分簡(jiǎn)單:?jiǎn)?dòng)平臺(tái)的基礎(chǔ)部分和查找系統(tǒng)的插件。在Eclipse中實(shí)現(xiàn)的絕大部分功能是由相應(yīng)的插件完成的,比如WrokBench UI插件完成界面的外觀顯示,Resource Management插件完成維護(hù)或生成項(xiàng)目或文件等資源管理工作(在下面的第二個(gè)例子就會(huì)用到這個(gè)插件),而Version and Configuration Management (VCM)插件則負(fù)責(zé)完成版本控制功能,等等。雖然以上提到的每一個(gè)功能都是絕大多數(shù)IDE環(huán)境所必備的功能,Eclipse卻也把它們都做成了插件模式,甚至用來(lái)開發(fā)Java程序的開發(fā)環(huán)境(Java development tooling,JDT)也只不過(guò)是Eclipse系統(tǒng)中的一個(gè)普通插件而已。整個(gè)Eclipse體系結(jié)構(gòu)就象一個(gè)大拼圖,可以不斷的向上加插件,同時(shí),現(xiàn)有插件上還可以再加插件。下面的插件開發(fā)示例就是在WorkBench UI插件中的觀察窗口擴(kuò)展點(diǎn)上開發(fā)的。
本文第一部分介紹過(guò)Eclipse的開發(fā)界面其中之一就是觀察窗口,它通常配合編輯窗口顯示一些有用的信息,在這里我們只簡(jiǎn)單生成一個(gè)顯示歡迎信息的觀察窗口,假設(shè)新插件的名子叫Welcome。
第一步,先用向?qū)陆ㄒ粋€(gè)Java項(xiàng)目。我們可以在菜單欄選擇FileàNew,或用工具欄的向?qū)О存I,或是在資源窗口用鼠標(biāo)右鍵菜單中的New,打開向?qū)?duì)話框,然后用缺省方式創(chuàng)建項(xiàng)目。并在項(xiàng)目中建立一個(gè)Welcome.java文件,代碼如下:
package com.nidapeng.eclipse.plugin;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.ui.part.ViewPart;
public class Welcome extends ViewPart {
Label label;
public Welcome() {
}
public void createPartControl(Composite parent) {
label = new Label(parent, SWT.WRAP);
label.setText("Welcome to Eclipse");
}
public void setFocus() {
}
}
為使這個(gè)程序能正常編譯,要配置它的編譯環(huán)境,即指定所需的CLASSPATH。在Eclipse中可以用幾種方法,常用的是兩種:第一是在資源窗口或Java包窗口選中該項(xiàng)目,點(diǎn)擊鼠標(biāo)右鍵,在打開的菜單中選擇屬性(Properties),之后在屬性對(duì)話框中選擇Java Build PathàLibraries,用Add External JARs功能添加三個(gè)包,它們都是Eclipse的現(xiàn)有插件的類包,可以在"你的Eclipse安裝路徑plugins"下面的相應(yīng)路徑中找到。分別是org.eclipse.core.runtime插件中的runtime.jar,org.eclipse.swt中的swt.jar和org.eclipse.ui中的workbench.jar。第二種指定CLASSPATH的方法是先將以上提到的三個(gè)包直接導(dǎo)入到Eclipse中的某下一個(gè)項(xiàng)目中。如果導(dǎo)入到和Welcome.java相同的項(xiàng)目中,則無(wú)需進(jìn)一步指定CLASSPATH,否則需要在項(xiàng)目的屬性菜單中選擇Java Build PathàProjects,然后選中這三個(gè)包所在的項(xiàng)目。 (未完待續(xù))
在plugin.xml中一共有四個(gè)主要的標(biāo)簽:plugin,requires,runtime,extension。其中plugin標(biāo)簽的屬性提供的是我們要開發(fā)的Welcome插件的基本信息,除了name,version,provider-name等,最重要的是id,它要求不能和現(xiàn)有的Eclipse插件id有沖突,因此我們用包名作為插件的id。requires標(biāo)簽中所列出的是需要的插件,這里我們要用到Eclipse Workbench和SWT API,因此導(dǎo)入了org.eclipse.ui插件。runtime標(biāo)簽指明的是我們開發(fā)的插件所在JAR包的文件名。extension標(biāo)簽是插件擴(kuò)展點(diǎn)的信息。org.eclipse.ui.views是Eclipse系統(tǒng)提供的觀察窗口擴(kuò)展點(diǎn),我們的例子是一個(gè)觀察窗口(View),這表明我們是要在 org.eclipse.ui.views擴(kuò)展點(diǎn)上進(jìn)一步開發(fā)。
extension中還包括category和view兩個(gè)標(biāo)簽,在后續(xù)的啟動(dòng)Welcome插件步驟中,我們就會(huì)知道這兩個(gè)標(biāo)簽的含義。要注意的是category和view標(biāo)簽的id的唯一性,并且在view的屬性中聲明了Welcome插件的類名。
在Eclipse中為plugin.xml提供了缺省可視化的編輯器,在編寫plugin.xml過(guò)程中可以借助這個(gè)編輯器完成一些工作。如果你直接錄入了plugin.xml文件源代碼,還可以用這個(gè)編輯器校驗(yàn)?zāi)愕拇a:如果編輯器不能正確讀入,就表明你的plugin.xml有一些問(wèn)題。
在確認(rèn)Weclome.java和plugin.xml都正確無(wú)誤之后,可以用Eclipse菜單欄中的Export命令將Weclome.java導(dǎo)出為JAR文件,它的名子應(yīng)該和plugin.xml中runtime聲明的JAR相一致。同時(shí)導(dǎo)出plugin.xml。安裝Welcome插件的方法和本文第一部分介紹的安裝Tomcat插件方法是一樣的:首先在"Eclipse的安裝路徑plugins"路徑下面建立一個(gè)com.nidapeng.eclipse.plugin路徑,然后將Weclome.jar和plugin.xml拷到這個(gè)路徑下。之后必需重新啟動(dòng)Eclipse,在Eclipse啟動(dòng)的時(shí)候,它會(huì)搜索所有在插件路徑下的插件并注冊(cè)它們(僅僅是注冊(cè),只有在需要某個(gè)插件的時(shí)候,Eclipse才會(huì)啟動(dòng)它)。在重新啟動(dòng)的Eclipse的菜單欄中選擇PerspectiveàShow ViewàOthers,在打開的對(duì)話框中我們會(huì)找到在plugin.xml中extension的category標(biāo)簽中聲明的name屬性:Welcome。在Welcome的支結(jié)點(diǎn)中包含了view標(biāo)簽name屬性:Welcome to Eclipse。選中它并確認(rèn),Welcome窗口就會(huì)顯示在Eclipse Workbench上的某個(gè)位置 。如果在執(zhí)行了以上操作,但沒(méi)有顯示新窗口,可以再次打開Show View菜單,此時(shí)在菜單中應(yīng)該有新一頂選擇:Welcome to Eclipse,然后選中它。
上面我們完成了一個(gè)觀察窗口的插件,但這個(gè)操作過(guò)程對(duì)開發(fā)稍微復(fù)雜一些的插件就顯得不太方便了:每次測(cè)試都要將代碼打包,發(fā)布,再重新啟動(dòng)Eclipse系統(tǒng)!為此Eclipse提供了一個(gè)專門為開發(fā)插件而做插件(有點(diǎn)繞嘴):Plug-in Development Environment(PDE)。本文前面曾提到,目前Eclipse的Release或Stable版本缺省提供了這個(gè)插件,因此如果安裝的Eclipse是這兩個(gè)版本中的一個(gè)就可以直接進(jìn)行下面的步驟。下面我們?cè)儆肞DE環(huán)境開發(fā)一個(gè)稍微復(fù)雜一些的插件。
第一步仍然要新建一個(gè)項(xiàng)目,只是在向?qū)е胁皇怯肑ava項(xiàng)目,而是Plug-in Development中的Plug-in Project。在應(yīng)用向?qū)尚马?xiàng)目的時(shí)候,要注意兩點(diǎn):第一是PDE的項(xiàng)目名稱就是plugin的id,因此要保證它的唯一性,這里我們的項(xiàng)目名是com.nidapeng.eclipse.plugin.pde。其次為了進(jìn)一步說(shuō)明Eclipse插件的結(jié)構(gòu),在Plug-in Code Generators中,選擇用向?qū)0迳梢粋€(gè)缺省的插件。
這個(gè)用缺省方式生成的插件類對(duì)于我們將要的代碼并不是必需的,也可以用生成空插件的方式建立我們的項(xiàng)目,這樣做只是為進(jìn)一步說(shuō)明Eclipse的插件結(jié)構(gòu)。項(xiàng)目生成之后,在我們的項(xiàng)目中會(huì)包含一個(gè)PdePlugin.java文件,它就是以缺省方式生成的插件類。注意到它繼承了AbstractUIPlugin類,而AbstractUIPlugin類實(shí)現(xiàn)了org.eclipse.ui.plugin接口。事實(shí)上,所有的Eclipse插件都會(huì)有一個(gè)相應(yīng)的實(shí)現(xiàn)plugin接口的類,這個(gè)類將是新插件的主類(類似于有main()函數(shù)的Java類),它負(fù)責(zé)管理插件的生存期。在我們的AbstractUIPlugin繼承子類中,可以用singleton模式來(lái)保存在Eclipse中的生成的該插件的第一個(gè)也是唯一實(shí)例,一般來(lái)說(shuō),在該繼承子類中也要實(shí)現(xiàn)一個(gè)getDefault()方法以返回當(dāng)前插件的實(shí)例。而且,當(dāng)Eclipse首次使用該插件的時(shí)候,這個(gè)主類將是第一個(gè)被調(diào)用的類,因此我們也可以在它的代碼中執(zhí)行一些初始化的工作。而且如果插件需要使用Preferences,Dialogs或Images資源,也可以通過(guò)這個(gè)類中的相應(yīng)方法來(lái)得到它們的實(shí)例,如用其中的getDialogSettings(),getPreferenceStore(),getImageRegistry()方法。
但是象前面提到的,PdePlugin.java對(duì)下面的例子并不是必需的,我們不用對(duì)它進(jìn)行任何修改。在我們第一個(gè)例子中的Weclome插件,根本就沒(méi)有生成AbstractUIPlugin的繼承子類,此時(shí)系統(tǒng)會(huì)自動(dòng)為Weclome插件生成一個(gè)缺省的主類(類似于Java類構(gòu)造函數(shù),如果沒(méi)有聲明,系統(tǒng)會(huì)指定一個(gè)默認(rèn)的構(gòu)造函數(shù))。下面的代碼是才真正實(shí)現(xiàn)了我們新插件的功能,假設(shè)這個(gè)插件名子是NoticeView:
package com.nidapeng.eclipse.plugin.pde;
import org.eclipse.core.resources.*;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.runtime.CoreException;
import java.util.ResourceBundle;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
public class NoticeView extends ViewPart implements
Runnable,IResourceChangeListener ,IResourceDeltaVisitor{
private ResourceBundle resourceBundle;
private Label label;
private Display disp;
private String dispTxt;
public NoticeView() {
ResourcesPlugin.getWorkspace().addResourceChangeListener(this,
IResourceChangeEvent.PRE_CLOSE
| IResourceChangeEvent.PRE_DELETE
| IResourceChangeEvent.PRE_AUTO_BUILD
| IResourceChangeEvent.POST_AUTO_BUILD
| IResourceChangeEvent.POST_CHANGE);
}
public static IWorkspace getWorkspace() {
//ResourcesPlugin插件的主類!
return ResourcesPlugin.getWorkspace();
}
public void createPartControl(Composite parent) {
label = new Label(parent, SWT.WRAP);
label.setText("change your project status...");
disp = Display.getDefault();
}
public void setFocus() {
}
// 實(shí)現(xiàn)IResourceChangeListener接口中的resourceChanged方法
public void resourceChanged(IResourceChangeEvent event) {
IResource res = event.getResource();
switch (event.getType()) {
case IResourceChangeEvent.PRE_CLOSE :
dispTxt = res.getFullPath() + " is about to closed!";
break;
case IResourceChangeEvent.PRE_DELETE :
dispTxt = res.getFullPath() + " is about to be deleted!";
break;
case IResourceChangeEvent.POST_CHANGE :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
case IResourceChangeEvent.PRE_AUTO_BUILD :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
case IResourceChangeEvent.POST_AUTO_BUILD :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
}
disp.syncExec(this);
}
// 實(shí)現(xiàn)IResourceDeltaVisitor接口中的visit方法
public boolean visit(IResourceDelta delta) {
IResource res = delta.getResource();
switch (delta.getKind()) {
case IResourceDelta.ADDED :
dispTxt = "Resource "+res.getFullPath()+" was added.";
break;
case IResourceDelta.REMOVED:
dispTxt = "Resource "+res.getFullPath()+" was removed.";
break;
case IResourceDelta.CHANGED :
dispTxt = "Resource "+res.getFullPath()+" has changed.";
break;
}
return true; // visit the children
}
// 實(shí)現(xiàn)Runnable接口中的run方法
public void run() {
try {
label.setText(dispTxt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
(未完待續(xù))
Eclipse入門使用指南及開發(fā)Eclipse插件(6)
象上面的第一個(gè)Welcome插件,這個(gè)新插件同樣繼承了ViewPart,不同的是實(shí)現(xiàn)了三個(gè)接口:Runnable,IResourceChangeListener ,IResourceDeltaVisitor。其中的Runnable大家應(yīng)該很熟悉:多線程的接口。而IResourceChangeListener和IResourceDeltaVisitor是Eclipse系統(tǒng)中的資源接口,這里的資源是指Eclipse中的項(xiàng)目或文件等。在下面運(yùn)行NoticeView插件的過(guò)程中你可以通過(guò)添加、打開、刪除項(xiàng)目或文件來(lái)觸發(fā)這兩個(gè)接口中的事件,并在我們的觀察窗口中顯示相關(guān)信息。
在程序中比較奇怪部分的是在resourceChanged()函數(shù)里面,并沒(méi)有象大家想象的那樣直接調(diào)用label.setText()方法來(lái)顯示信息,而是調(diào)用了disp.syncExec(this),其中的disp是Display類型的對(duì)象。這是因?yàn)閞esourceChanged()方法運(yùn)行的線程和lable所在插件運(yùn)行的Eclipse主線程并不是同一個(gè)線程,如果直接調(diào)用label.setText()方法,會(huì)拋出一個(gè)異常。
下面還需要對(duì)項(xiàng)目中的plugin.xml進(jìn)行一些改動(dòng),主要就是加上擴(kuò)展點(diǎn)聲明,這個(gè)xml文件和Welcome插件的plugin.xml非常接近,這里就不做過(guò)多的說(shuō)明了。要運(yùn)行這個(gè)插件,可以直接用Eclipse中的運(yùn)行按鈕,因?yàn)檫@個(gè)項(xiàng)目是一個(gè)Plug-in Project,此時(shí)項(xiàng)目會(huì)自動(dòng)以Run-time Workbench方式運(yùn)行。運(yùn)行后,會(huì)生成一個(gè)和當(dāng)前Eclipse完全一致的平臺(tái),在這個(gè)平臺(tái)上可以直接運(yùn)行NoticeView插件,查看這個(gè)插件到底會(huì)執(zhí)行什么功能,也可以用直接Run-time Workbench方式調(diào)試插件。這里省去了安裝插件,重啟動(dòng)Eclipse等過(guò)程,可以看到用PDE開發(fā)插件的過(guò)程比直接用Java開發(fā)環(huán)境簡(jiǎn)潔了很多!
Eclipse的開發(fā)不僅僅限于插件的開發(fā),它還可以取代Java中的標(biāo)準(zhǔn)Swing,進(jìn)行基于Java的獨(dú)立應(yīng)用程序GUI開發(fā)。它帶來(lái)的好處是顯而易見(jiàn)的:高速,資源占用低,跨平臺(tái),代碼開放,有大公司的支持等等。
由于Eclipse目前還在開發(fā)階段,筆者在用它調(diào)試程序時(shí)發(fā)現(xiàn)有些性能還不是十分的穩(wěn)定,一些地方會(huì)遇到奇怪的問(wèn)題,要求使用者能想一些辦法解決。不過(guò),以現(xiàn)在Eclipse的開發(fā)速度,相信過(guò)不了多久,它的各種功能會(huì)逐步完善。目前Eclipse雖然有種種不足,但瑕不掩玉,筆者對(duì)Eclipse的總體印象還是非常不錯(cuò)的,運(yùn)行速度,資源占用都要好于IVJ,操作起來(lái)也大多順手,而且即使在現(xiàn)階段也很少有意外退出等重大的Bug發(fā)生,希望未來(lái)的Eclipse能真正達(dá)到IVJ的功能,VisualCafe的速度,成為廣大程序員開發(fā)軟件的一大利器! (全文完)
聯(lián)系客服