簡(jiǎn)介
許多年以前,當(dāng)我第一次仔細(xì)考察Eclipse時(shí)(我記得當(dāng)時(shí)好像是2.0版本),我對(duì)它的完全免費(fèi)印象非常深。它提供了很多非常不錯(cuò)的Java開發(fā)能力,但是當(dāng)時(shí)并沒有比那些商業(yè)版本好上多少。然而,真正吸引我的是我發(fā)現(xiàn)可以用我自己的代碼隨意擴(kuò)展它的特性。事實(shí)上,并不需要特別的工具--Eclipse提供了所有可以用于自身開發(fā)的工具和框架。
從那以后,Eclipse開始在各方面成熟起來(lái)--它的設(shè)計(jì)更加改進(jìn)了,它的結(jié)構(gòu)變得更加強(qiáng)健且不失靈活,它的各種工具也變得更加強(qiáng)大和高效。它已經(jīng)從一個(gè)工具集成框架變成了一個(gè)開發(fā)胖客戶端(rich-client)程序的平臺(tái)。這也證明了我心目中對(duì)它本身的基本設(shè)計(jì)理念的質(zhì)量的評(píng)價(jià)。
擴(kuò)展Eclipse需要你對(duì)可用的結(jié)構(gòu)和工具的基本熟悉和了解。因?yàn)閷W(xué)習(xí)如何去做一件事情的最好方式就是去試著自己做做看,本篇文章將會(huì)幫助你使用插件開發(fā)環(huán)境PDE開發(fā)一個(gè)簡(jiǎn)單的Eclipse插件。當(dāng)你學(xué)習(xí)一點(diǎn)Eclipse體系結(jié)構(gòu)的背景信息之后,你將會(huì)使用PDE向?qū)?lái)創(chuàng)建一個(gè)新的插件,完成一個(gè)簡(jiǎn)單的工作臺(tái)視圖,并且測(cè)試你的工作看最后的結(jié)果。實(shí)現(xiàn)的具體細(xì)節(jié)不能一一說(shuō)明了。為了完成這個(gè)工作,你需要獲得最新的Eclipse SDK(3.1版本),可以從 http://www.eclipse.org/downloads 獲得一份免費(fèi)的拷貝。
所有的東西都是插件
從一個(gè)開發(fā)者的角度來(lái)說(shuō),Eclipse是一個(gè)開發(fā)各種客戶端程序的平臺(tái)。本身其是作為一個(gè)開發(fā)工具而產(chǎn)生的,現(xiàn)在它的范圍已經(jīng)擴(kuò)展到包括各種胖客戶端應(yīng)用程序,以及非桌面環(huán)境,比如手持設(shè)備和嵌入式系統(tǒng)。為了支持如此大范圍的應(yīng)用,高度的可擴(kuò)展性是非常必要的。每個(gè)基于Eclipse的程序都包含了多個(gè)組件,它們被稱作為插件(plugins),相互間通過(guò)預(yù)先定義的接口集合進(jìn)行交互。插件通過(guò)一個(gè)很小的運(yùn)行時(shí)層來(lái)進(jìn)行管理,負(fù)責(zé)它們的發(fā)現(xiàn)和啟動(dòng)。從3.0版本開始,原來(lái)的運(yùn)行時(shí)層實(shí)現(xiàn)被新的基于開放服務(wù)網(wǎng)關(guān)初始化(Open Services Gateway initiative, OSGi)所替代,從而提高了Eclipse向多個(gè)硬件和操作系統(tǒng)的移植能力,并且提供了對(duì)管理的執(zhí)行環(huán)境的兼容性。因此,目前的Eclipse插件是作為OSGi的組件來(lái)開發(fā)的。
和其他的組件管理環(huán)境類似,每個(gè)Eclipse插件的運(yùn)行時(shí)特性是在它的描述符中被指定的,運(yùn)行時(shí)層使用描述符來(lái)配置插件的執(zhí)行環(huán)境。在3.0版本以前,描述符是一個(gè)XML格式的文件,名為plugin.xml,在每個(gè)插件目錄的根目錄中保存。為了和OSGi運(yùn)行時(shí)整合,插件一般被打包成JAR文件,并且它們的屬性比如單一的標(biāo)識(shí)符,版本號(hào),運(yùn)行時(shí)classpath和導(dǎo)出的包,被包含在它們的JAR manifest中(即META-INF/MANIFEST.MF)。然而,對(duì)于一般記錄Eclipse插件的特性的描述符--插件擴(kuò)展和擴(kuò)展點(diǎn)--仍然留在plugin.xml文件中描述。
一個(gè)插件的擴(kuò)展點(diǎn)基本上是它的組件配置點(diǎn),使用XML Schema子集描述。一個(gè)完成某種抽象功能的插件,比如在工作臺(tái)顯示獨(dú)立視圖等,將會(huì)公布一個(gè)擴(kuò)展點(diǎn),指定每個(gè)實(shí)現(xiàn)必須完成什么才能被這個(gè)插件使用。這些一般需要包含簡(jiǎn)單的屬性,比如窗口標(biāo)題和圖標(biāo)路徑,同時(shí)也包含實(shí)現(xiàn)具體接口的類名稱。在這里的例子中,每個(gè)要提供一個(gè)視圖實(shí)現(xiàn)的插件必須聲明一個(gè)插件描述符屬性的ID是org.eclipse.ui.views擴(kuò)展點(diǎn)的擴(kuò)展。這個(gè)擴(kuò)展必須指定類實(shí)現(xiàn)接口的名為org.eclipse.ui.IViewPart。在運(yùn)行時(shí),工作臺(tái)插件查找插件記錄中所有的org.eclipse.ui.views的擴(kuò)展并且將它們提供給用戶作為可顯示的視圖。當(dāng)用戶選擇打開某個(gè)視圖時(shí),工作臺(tái)插件初始化指定在插件描述符中視圖的實(shí)現(xiàn)類,并且通過(guò)接口org.eclipse.ui.IViewPart來(lái)和它交互。這個(gè)機(jī)制是Eclipse擴(kuò)展性的基石。插件給其他的插件提供具體的實(shí)現(xiàn),很多都是實(shí)現(xiàn)了自身高度抽象,并且將它們作為擴(kuò)展點(diǎn)提供給其他的插件來(lái)完成。
P 1: plugin.xml的內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> <plugin> <extension point="org.eclipse.ui.views"> <category id="com.developer.superview.category1" name="Developer.com"/> <view category="com.developer.superview.category1" class="com.developer.superview.Superview" id="com.developer.superview.view1" name="Superview"/> </extension> </plugin> |
插件開發(fā)環(huán)境
就像你所看到的一樣,開發(fā)Eclipse程序的核心任務(wù)主要包含創(chuàng)建實(shí)現(xiàn)一個(gè)或者多個(gè)擴(kuò)展的插件。理論上來(lái)說(shuō),沒有東西會(huì)阻止你使用記事本,或者vi或者命令行中的javac來(lái)開發(fā)Eclipse插件(我想聽聽嘗試過(guò)的人怎么說(shuō)得!)。幸運(yùn)的是,Eclipse擁有一個(gè)強(qiáng)大的工具集來(lái)使這一任務(wù)變得簡(jiǎn)單。插件開發(fā)環(huán)境PDE是作為Eclipse SDK的一個(gè)部分自由分發(fā)的,并且作為一個(gè)基于Eclipse的IDE工具的好范例而存在--它只是一些插件和它們的擴(kuò)展的集合(事實(shí)上他們也留下了一些擴(kuò)展點(diǎn),你可以用這些擴(kuò)展點(diǎn)來(lái)開發(fā)自己的PDE擴(kuò)展)。
在PDE中,每個(gè)正在開發(fā)的插件都是被單個(gè)的Java工程所代表。插件工程具有一些獨(dú)一無(wú)二的特性來(lái)標(biāo)示自己。比如說(shuō)它們每一個(gè)都有一個(gè)插件描述符(一個(gè)manifest和/或一個(gè)plugin.xml文件),一個(gè)基于描述符指定的依賴關(guān)系的動(dòng)態(tài)classpath,特殊的編譯器,和其他配置屬性。PDE提供了一個(gè)插件創(chuàng)建向?qū)В梢赃x擇各種需要的部分創(chuàng)建插件工程。
PDE帶有一個(gè)特別的多頁(yè)編輯器來(lái)使得插件開發(fā)更加簡(jiǎn)單。插件Manifest編輯器用到3個(gè)文件--包含的manifest(META-INF/MANIFEST.MF),plugin.xml和build.properties.它允許你編輯所有必要的屬性來(lái)描述一個(gè)插件--它的基本運(yùn)行時(shí)要求,依賴,擴(kuò)展,擴(kuò)展點(diǎn)等等。當(dāng)開發(fā)插件的時(shí)候你需要做更詳細(xì)的了解。
因?yàn)镋clipse插件都是Java的工程,它們?nèi)笔《际侵鸩綐?gòu)建的,不需要特別的人工編譯步驟。PDE也允許使用Ant來(lái)創(chuàng)建非自動(dòng)編譯的插件;你可以為你的插件創(chuàng)建一個(gè)Ant的build腳本(在Package Explorer中,右鍵點(diǎn)擊你的plugin.xml并且選擇PDE Tools -> Create Ant Build File),它提供了創(chuàng)建多個(gè)目標(biāo)輸出的方式(比如插件JAR包,源代碼包等等)。
為了測(cè)試你的工作,PDE提供了一個(gè)特別的啟動(dòng)配置類型,允許你使用它的配置中包含的工作區(qū)插件來(lái)啟動(dòng)另外一個(gè)工作臺(tái)實(shí)例(被稱為運(yùn)行時(shí)工作臺(tái))(也被稱作為self-h(huán)osting--你不比將你的插件安裝進(jìn)一個(gè)外部的工作臺(tái)來(lái)測(cè)試它們,你可以使用自己的開發(fā)工作臺(tái)動(dòng)態(tài)安裝)。你的Eclipse啟動(dòng)配置將允許你指定你想包含的哪個(gè)插件,特殊的命令行參數(shù),環(huán)境屬性等等。
PDE也有一個(gè)強(qiáng)大的用戶文檔和擴(kuò)展參考信息(Javadoc和擴(kuò)展點(diǎn)文檔)。因?yàn)樗呛虴clipse在一個(gè)規(guī)則下分發(fā)的,所以它的代碼也是完全開放的,并且缺省包含的SDK中。
創(chuàng)建簡(jiǎn)單的插件
為了對(duì)使用PDE開發(fā)插件有個(gè)更好的理解,你可以開發(fā)一個(gè)簡(jiǎn)單的工作臺(tái)視圖。它的功能是列出運(yùn)行時(shí)工作臺(tái)中所有的可用視圖(你可以稱它為超級(jí)視圖)。當(dāng)你這樣做的時(shí)候,你可以使用這個(gè)身邊的例子,檢查插件Manifest編輯器的各個(gè)部分。
首先,啟動(dòng)你的Eclipse SDK,選擇一個(gè)空工作區(qū)。當(dāng)你關(guān)掉歡迎頁(yè)面時(shí),你應(yīng)該缺省進(jìn)入Java開發(fā)模式。第一步,使用新建插件向?qū)?lái)創(chuàng)建插件。然后,使用插件Manifest編輯器編輯其描述符,并且使用JDT來(lái)實(shí)現(xiàn)一個(gè)Java類。最后,在一個(gè)運(yùn)行時(shí)工作臺(tái)啟動(dòng)插件來(lái)看效果。好,開始:
1. 在main menu中,點(diǎn)擊File->New->Project,然后選擇Plug-in Project并且點(diǎn)擊Next;
2. 在下一個(gè)向?qū)ы?yè)中,輸入com.developer.superview作為工程名。點(diǎn)擊Next;
3. 在此頁(yè)中,保持所有的域?yàn)槿笔≈担c(diǎn)擊Finish。當(dāng)被問到是否轉(zhuǎn)換到插件開發(fā)模式時(shí),選擇yes。這時(shí),插件已經(jīng)被創(chuàng)建了,并且你可以在插件Manifest編輯器中看到總覽。
總覽頁(yè)面包含了一些一般屬性,如插件的ID,版本,名稱,提供者,插件類和平臺(tái)過(guò)濾器。它還提供了到其他頁(yè)面的鏈接,這些頁(yè)面指定了插件內(nèi)容,編譯配置,和測(cè)試運(yùn)行的鏈接以及導(dǎo)出插件(所有的和簡(jiǎn)單描述)。ID是必須的且必須為獨(dú)一無(wú)二的。版本一般為3到4個(gè)部分組成,使用點(diǎn)號(hào)隔開的版本標(biāo)識(shí)符(major.minor.service{.qualifier})。插件版本在你的平臺(tái)插件開發(fā)向?qū)е杏性敿?xì)記述。在這個(gè)練習(xí)里,你可以指定為缺省的1.0.0。姓名和提供者是可選的,只是被用來(lái)在產(chǎn)品配置里顯示的標(biāo)記。類屬性也是可選的,目前它可以被用來(lái)代表一個(gè)單獨(dú)的運(yùn)行時(shí)插件實(shí)例,可以用來(lái)作為一個(gè)單獨(dú)的對(duì)多個(gè)插件特定數(shù)據(jù)的訪問點(diǎn)。在這個(gè)例子里,向?qū)шJ將了一個(gè)缺省的類實(shí)現(xiàn),你可以在例子的任何代碼里提到它。平臺(tái)過(guò)濾器可以用來(lái)限制插件的平臺(tái)可用性(這個(gè)例子里沒有用到)。
![]() |
依賴頁(yè)面允許你指定其他一些你所依賴的插件,無(wú)論是編譯的還是運(yùn)行時(shí)的。增加一個(gè)插件依賴意味著被選擇插件的所有Java包的導(dǎo)出,包含任何的擴(kuò)展點(diǎn),對(duì)你自己的代碼都是可用的。你可以選擇在你的SDK安裝時(shí)增加任何可用插件,包括你的工作臺(tái)(也就是說(shuō),其他你當(dāng)前正在使用的插件)。
在我們這里例子里,你將把org.eclipse.core.runtime和org.eclipse.ui作為你的依賴。任何依賴都是可選的(確認(rèn)你的代碼需要它),你可以選擇重新導(dǎo)入一個(gè)依賴(選擇列表中的一個(gè)插件,并且點(diǎn)擊屬性…)。你可以請(qǐng)求某個(gè)Java包對(duì)你的類啟動(dòng)器可用,無(wú)論它是從何而來(lái)。這是一個(gè)高級(jí)開發(fā)主題在你的平臺(tái)文檔中有詳細(xì)敘述。這個(gè)頁(yè)面里,你可以做一些各種類型的依賴關(guān)系的分析,可以給你一個(gè)更加好的插件依賴的認(rèn)識(shí)。 運(yùn)行時(shí)頁(yè)面允許你指定想導(dǎo)出的Java包(也就是說(shuō),在你的插件列表中使你的插件可見)。在這個(gè)列表中,你無(wú)須導(dǎo)出任何東西,因?yàn)槟悴惶峁┤魏蔚墓δ茏鳛楣睞PI可用。如果你要這么作,那你必須使得它們針對(duì)其衍生的插件可用(這是更加高級(jí)的開發(fā)主題了)。Classpath節(jié)是用來(lái)指定哪個(gè)類文件夾或者JAR文件應(yīng)該作為你的運(yùn)行時(shí)classpath,如果有多個(gè)的話(缺省只有你的插件的根目錄是被包含在它的classpath里)。
擴(kuò)展頁(yè)面是你指定你所有的插件擴(kuò)展的地方。它包含了一個(gè)通過(guò)你插件實(shí)現(xiàn)的擴(kuò)展的樹(你可以從列在你的依賴的插件中選擇公布的擴(kuò)展點(diǎn)),和一個(gè)詳細(xì)的包含反映你的當(dāng)前樹選擇的域的表單。要?jiǎng)?chuàng)建新的擴(kuò)展元素,右鍵點(diǎn)擊樹中的元素,選擇New子菜單。對(duì)元素的選擇以及每個(gè)元素的屬性集合,依賴于關(guān)聯(lián)的擴(kuò)展點(diǎn)。你可以通過(guò)右鍵點(diǎn)擊樹中的擴(kuò)展的方式來(lái)獲得你的擴(kuò)展點(diǎn)文檔,然后選擇Show Description。事實(shí)上,為了繼續(xù)我們的例子,我們將為超級(jí)視圖實(shí)現(xiàn)增加一個(gè)新的擴(kuò)展:
4. 點(diǎn)擊Add。在New Extension對(duì)話框中,選擇擴(kuò)展點(diǎn)org.eclipse.ui.views。點(diǎn)擊Finish。
5. 右鍵點(diǎn)擊列表中的擴(kuò)展;選擇New->category。輸入Developer.com作為名稱(類型ID為com.developer.superview.category1 保持不變)。
6. 右鍵點(diǎn)擊擴(kuò)展,選擇New->view,輸入SuperView作為名稱,com.developer.superview.category1作為分類(和在第5步中創(chuàng)建的類型ID匹配)。
7. 點(diǎn)擊class鏈接。輸入Superview作為類名,點(diǎn)擊Finish。這將會(huì)創(chuàng)建一個(gè)新的實(shí)現(xiàn)所需接口的類,并且在Java編輯器中打開它。
你可以馬上回到視圖的開發(fā)中來(lái)。現(xiàn)在,激活插件Manifest編輯器,點(diǎn)擊擴(kuò)展點(diǎn)的yemi。如果可用,將會(huì)列出所有你的插件公布的擴(kuò)展點(diǎn)。每個(gè)擴(kuò)展點(diǎn)的細(xì)節(jié)都是可以使用擴(kuò)展點(diǎn)方案編輯器來(lái)編輯的(這里不再詳細(xì)敘述了)。
生成頁(yè)面允許你對(duì)插件的生成配置進(jìn)行指定(或者選擇自定義生成來(lái)生成一個(gè)完整的自定義的生成過(guò)程,這個(gè)你需要自己實(shí)現(xiàn))。這些信息將會(huì)被增量生成器(你的工程的生成路徑也會(huì)相應(yīng)的更新,這也是你不能直接更改而讓PDE來(lái)為你做的原因)和一個(gè)Ant生成腳本所使用,你只能選擇兩者中的一個(gè)。在這個(gè)聯(lián)系里,你無(wú)須特別的生成要求。若你要這樣作,比如為你的視圖使用一個(gè)自定制的圖標(biāo),你必須保證它的目錄是在二進(jìn)制生成段中被檢查過(guò)的,以使得它對(duì)你的代碼在運(yùn)行時(shí)可用。
MANIFEST.MF,plugin.xml,和build.properties允許你編輯相應(yīng)文件的源代碼。這個(gè)只對(duì)高級(jí)熟練的Eclipse開發(fā)者推薦使用。
現(xiàn)在你對(duì)插件Manifest編輯器比較熟悉了,我們可以繼續(xù)我們的例子:
8. 激活Superview.java編輯器。你可以看到,為了完成視圖的實(shí)現(xiàn),你必須實(shí)現(xiàn)最少兩個(gè)方法:createPartControl(Composite)和setFocus()。這里,我就不詳細(xì)討論底層的API了。現(xiàn)在,你應(yīng)該知道你要?jiǎng)?chuàng)建一個(gè)表式的可視化組件——表格查看器——來(lái)顯示你的視圖內(nèi)容。你將配置它為一個(gè)內(nèi)容提供者來(lái)給它操縱你的組件的能力(具體的說(shuō)就是提取出你的模型結(jié)構(gòu)元素來(lái)適應(yīng)表格的包含),和一個(gè)標(biāo)志提供者,來(lái)給予它使用適當(dāng)?shù)臉?biāo)志和可選圖片來(lái)轉(zhuǎn)化你的模型元素到表格項(xiàng)的能力。你也可以給它配置一個(gè)排序器來(lái)按照字母表順序顯示表項(xiàng)。最后,你給它一個(gè)輸入--你的模型對(duì)象,即運(yùn)行時(shí)可用的一組所有可用視圖的描述符。完整實(shí)現(xiàn)如下:
List 2: SuperView.java(繼承ViewPart類):
package com.developer.superview; import org.eclipse.jface.viewers.ArrayContentProvider; public class SuperView extends ViewPart { ?public void createPartControl(Composite parent) { ?public void setFocus() { } |
這已經(jīng)足夠運(yùn)行這個(gè)例子了,保存,然后:
9. 在你的Package Explore里右鍵點(diǎn)擊,選擇Run As -> Eclipse Application。這將創(chuàng)建一個(gè)新的Eclipse使用缺省值的啟動(dòng)配置,啟動(dòng)它。
10. 當(dāng)運(yùn)行時(shí)工作臺(tái)出現(xiàn)的時(shí)候,你應(yīng)該看到歡迎視圖。點(diǎn)擊Window->Show View->Other…選擇Developer.com->Superview。點(diǎn)擊OK。
![]() |
你應(yīng)該看到的是Superview顯示的形式是:視圖<視圖號(hào)>。這作為一個(gè)例子來(lái)演示PDE使用已經(jīng)足夠了。然而,如果你想更深一步進(jìn)入JFace的學(xué)習(xí),你可以學(xué)著看能否把這個(gè)界面做的更加人性化一點(diǎn)。
在這里,表格里每條記錄代表一個(gè)工作臺(tái)視圖;你提供的模型對(duì)象作為該查看器的輸入為一組視圖的描述符(IViewDescriptor),你使用的內(nèi)容提供者將任何數(shù)組對(duì)象轉(zhuǎn)化為一個(gè)它的元素列表(父子關(guān)系)。但是,標(biāo)志提供者只是簡(jiǎn)單的使用了每個(gè)元素的toString()方法來(lái)作為其標(biāo)記。接口IViewDescriptor提供方法來(lái)獲得視圖標(biāo)號(hào)(getLabel()),甚至可以獲得視圖的圖標(biāo)圖像(getImageDescriptor())。你所要做的是重載兩個(gè)標(biāo)記提供者的方法:
11. 關(guān)閉運(yùn)行時(shí)工作臺(tái)。在Superview.java編輯器中,子類new LabelProvider()如列表3所示:
P 3: SuperView.java(重寫LabelProvider類部分方法):
package com.developer.superview; import org.eclipse.swt.graphics.Image; import org.eclipse.jface.resource.ImageDescriptor; public class SuperView extends ViewPart { ?public void createPartControl(Composite parent) { ?public void setFocus() { |
這里,你已經(jīng)重載了getText(Object)方法來(lái)返回元素(一個(gè)IViewDescriptor的實(shí)例)的標(biāo)號(hào)。為了使得看起來(lái)更加好看,你可以重載getImage(Object)方法來(lái)返回每個(gè)視圖的文字標(biāo)號(hào)的關(guān)聯(lián)圖標(biāo)。這里比較復(fù)雜一點(diǎn)了,你必須學(xué)習(xí)JFace和SWT,你將會(huì)發(fā)現(xiàn)圖像(org.eclipse.swt.graphics.Image)是操作系統(tǒng)的資源,必須被程序來(lái)管理。然而,IViewDescriptor只是返回了一個(gè)ImageDescriptor而不是圖像本身。一個(gè)圖像標(biāo)識(shí)符可能被用來(lái)創(chuàng)建一個(gè)Image實(shí)例,但是必須能夠在不需要的時(shí)候釋放。由于這個(gè)原因,你必須跟蹤創(chuàng)建的所有的Image實(shí)例并在不需要的時(shí)候釋放掉它。
要看最后的輸入,重新啟動(dòng)運(yùn)行時(shí)工作臺(tái)。(Ctrl + F11)
![]() |
打包并且分發(fā)插件
即使你可能完成了插件的開發(fā)和測(cè)試,你也需要將其從開發(fā)環(huán)境里導(dǎo)出分發(fā)到用戶手中。幸運(yùn)的是,Eclipse沒有把這個(gè)交給你自己完成。你可以使用導(dǎo)出向?qū)В霈F(xiàn)在你的插件編輯器的總覽頁(yè)面里。它將創(chuàng)建一個(gè)分發(fā)包文件,包含你的插件代碼和資源。用戶只要將其解壓在他們的Eclipse安裝里,如果它們的環(huán)境的所有依賴關(guān)系都滿足,那么Eclipse將會(huì)在需要時(shí)自動(dòng)發(fā)現(xiàn)和激活你的插件。
這種形式的分發(fā)和安裝被成為未管理的--如果你將來(lái)進(jìn)行更新的話,你將發(fā)現(xiàn)和安裝你的插件的更新的任務(wù)交給了用戶。一個(gè)更加有組織的方法時(shí)將你的插件組織成feature。feature是一組同時(shí)安裝和管理的插件。在集合插件之外,feature包含了一些信息,這些信息允許Eclipse更新管理器來(lái)定位公布的更新,并且發(fā)現(xiàn)新的關(guān)聯(lián)的feature。這樣的發(fā)布在某個(gè)web目錄下的更新叫做更新站點(diǎn)。PDE提供了向?qū)Ш途庉嬈鱽?lái)支持feature和更新站點(diǎn)的開發(fā)。
如果你開發(fā)整個(gè)應(yīng)用程序而不只是插件和feature,需要已有的基于Eclipse的產(chǎn)品的安裝,你需要使用產(chǎn)品配置編輯器(Product Configuration editor)和產(chǎn)品導(dǎo)出向?qū)В‥clipse Product export wizard),把你的應(yīng)用作為一個(gè)獨(dú)立的Eclipse產(chǎn)品。這個(gè)高級(jí)主題可以獨(dú)立成為一篇文章了。
結(jié)論
Eclipse是一個(gè)偉大的工具和胖客戶端應(yīng)用平臺(tái),不單提供了它的免費(fèi)開放組件,頁(yè)提供了它自身的開放實(shí)現(xiàn)。在Eclipse中,所有功能都封裝成插件,它們一個(gè)個(gè)使用良定義的擴(kuò)展點(diǎn)結(jié)合在一起。它的PDE提供了功能強(qiáng)大的工具和向?qū)?lái)幫助你開發(fā)你自己的插件。更重要的是,它提供了整個(gè)環(huán)節(jié)的開發(fā)支持,包括分發(fā)和后期產(chǎn)品維護(hù)。