這篇文章由天極網轉載過來,謝謝作者。原文地址:http://dev.yesky.com/SoftChannel/72342371961929728/20050415/1936405.shtml
Eclipse是一個非常流行的Java整合式開發環境(IDE),它是NetBeans/SunOne Studio、Jbuilder、和IntelliJ IDEA的強有力的競爭者。Java程式員群體正在迅速地遷移到Eclipse上,因為它是免費的、開放原始碼的、品質很好,而且非常容易定製。
本文的內容是如何在Eclipse中編寫外掛程式(plugin)。本文的目標讀者是哪些人呢?很多Eclipse使用者簡單地使用IDE而不需要進行定製; 很多人會使用他人建立的外掛程式,這些人不是本文的目標讀者。有些使用者希望定製Eclipse;有些人將為他們公司的僱員開發工具;有些人希望銷售與自己的產 品相關的工具;還有一些人希望使用其它名稱轉售預先安裝了某些工具的Eclipse。這些人組成了本文的目標受眾。開始編寫Eclipse外掛程式的前提條件是 瞭解如何使用Eclipse和編寫Java程式,並且對標準Widget工具包(SWT)有很好的理解。
安裝Eclipse
如果你已經使用了Eclipse 3,那麼可以跳過這一段落。如果沒有安裝該軟體,你首先需要下載和安裝它。你可以簡單地從Eclipse下載頁面下載最新的穩定版本,接著把下載的檔案解壓到一個檔案夾中(例如c:/dev)。在寫作本文的時候,這個檔案是eclipse-SDK-3.0.1-win32.zip(85MB)。這個過程會建立c:/dev/eclipse檔案夾。
請注意,在這個檔案夾下已經有一個叫做plugins的檔案夾了。你可以快速探索一下,會發現很多的已經安裝好的外掛程式。這是怎麼回事呢?因為Eclipse的核心相對較小,幾乎每個部分都是一個外掛程式。
架構
Eclipse由一個很小的核心和核心之上的大量外掛程式組成。有些外掛程式僅僅是供其它外掛程式使用的庫。其中存在很多你可以利用的工具。所有外掛程式使用的基礎庫是:
· 標準Widget工具包(SWT):Eclipse中處處使用的圖形化組件:按鈕,映像、游標、標籤等等。布局管理類。通常這個庫被用於代替Swing。
· JFace:菜單、工具條、對話方塊、參數選擇、字型、映像、文字檔的類和嚮導基類。
· 外掛程式開發環境(PDE):輔助資料操作、擴充、建立過程和嚮導的類。
· Java開發人員工具包(JDT):用於編程操作Java代碼的類。
上面的每一個類都有自己專有的功能,其中一些還可以單獨使用(儘管它們內在地依賴於其它類)。例如,SWT不僅僅只用於外掛程式;它還可以被用於建立非Eclipse的、獨立的應用程式。還有一些其它的庫沒有被列舉出來。
圖1顯示了Eclipse不同層次之間的關係。
安裝GEF和Draw2D運行時
在預設情況下,這兩個物件導向的庫(圖形化編輯器架構組件GEF和Draw2D)是沒有被安裝的。在本文中我們需要利用它們,因此首先需要安裝它們。你 可以在GEF首頁面下載GEF和Draw2D,下載3.0.1或以後版本,把檔案儲存為GEF-SDK-3.0.1.zip(5.5MB)。把這個檔案解 壓到Eclipse檔案夾下(這是包含plugins子檔案夾的檔案夾)。這兩個庫自身也是作為外掛程式加進來的。
這些庫提供了什麼樣的 功能?它們構成了建立圖形化外掛程式的基礎。圖形化外掛程式通常顯示一些對象(例如方框和標籤,用線和箭頭連結在一起)。這些對象和連接器的繪製都是由 Draw2D來處理的。但是繪製過程僅僅是圖形化編輯器實現的一半功能。另一半--編輯器命令、工具條、拖放功能、列印--由GEF來完成。
配置PDE選項
安裝上述的各種組件之後,下一步就是定製或至少是熟悉外掛程式配置選項。這些選項在菜單表單 -> 選項的"外掛程式開發"類別下選擇。瀏覽一下外掛程式用到的數以十計的配置選項。你可以特地看一下Target Environment(目標環境)類別。它允許我們選擇預設的作業系統、視窗(windowing)系統、CPU架構和語言。
我們 感興趣的還有Plug-in Development(外掛程式開發)透視圖(透視圖是一組視圖參數選擇,包括面板、視圖、工具條等等,根據不同的事務發生改變,可以把它看出 Eclipse中的"模式")。通過選擇菜單中的視窗-> 開啟透視圖 -> 其它,然後在列表中選擇"外掛程式開發"就可以看到它了。它與Java透視圖相似,但是擁有一個外掛程式視圖,可以顯示所有檢測到的外掛程式。圖2顯示了如何啟用這個 透視圖,並顯示了該透視圖。
| 建立一個簡單外掛程式 建立外掛程式最簡單的辦法是使用檔案-> 建立->外掛程式項目嚮導所提供的模板。接著輸入一個項目名稱(例如"Invokatron")。這是什麼意思呢?我們將建立的外掛程式是 Invokatron,它是一個供Java代碼使用的代碼產生圖形化編輯器。本文刪除了Invokatron的路徑,但是很明顯這個雄心勃勃的項目直到下 次安裝時才會完成。 在"下一步"頁面上,除了類名之外其它的選項都不變,類名輸入invokatron.InvokatronPlugin。在"外掛程式內容"頁面上,輸入你認為適合的任何資訊。在"模板"頁面上,選中檢查框以啟用模板。我們可以在多個模板中進行選擇: · Hello, World · 簡單的XML編輯器 · 多頁面編輯器和嚮導 · 透視圖擴充 · 快顯功能表 · 屬性頁面 · 視圖 · 擁有前面的一個或多個資料項目的自訂外掛程式 對於本文的樣本,我們使用自訂外掛程式模板。選擇"多頁面編輯器"-"建立檔案嚮導"-"屬性"頁面。在"下一步"頁面輸入下面一些值: "多頁面編輯器"頁面(圖3所示): · Java程式包名稱:invokatron.editor · 編輯器類名稱:InvokatronEditor · 編輯器輔助類名稱:InvokatronEditorContributor · 編輯器名稱:Invokatron Editor · 副檔名:invokatron
"建立嚮導"頁面(圖4所示): · Java程式包名稱:invokatron.wizard · 嚮導類別ID:Invokatron · 嚮導類別名稱:Invokatron Wizard · 嚮導類名稱: InvokatronWizard · 嚮導頁面類名稱:InvokatronWizardPage · 嚮導名稱:Invokatron Wizard · 副檔名: invokatron · 初始檔案名稱: MyClass.invokatron
"屬性"頁面(圖5所示): · Java程式包名稱:invokatron.properties · 屬性頁面類: InvokatronPropertyPage · 屬性頁面名稱:Invokatron Properties · 目標類:org.eclipse.core.resources.IFile · 檔案名稱過濾器:*.*
這個時候Eclipse產生了大量的檔案: · plugin.xml:描述該外掛程式的主檔案。它包含了輔助代碼產生、庫、外掛程式依賴關係和擴充指向的一些資訊。 · build.properties:用於描述建立(build)過程的檔案。它主要用於指定需要的庫。 · invokatron/*.java:外掛程式類。 · sample.gif:功能表項目顯示的表徵圖。 plugin.xml檔案和build.properties一起被顯示在多頁面編輯器中。第一個頁面("預覽")允許你在測試環境中匯出和運行該外掛程式。"匯出"的意思是通過產生一些代碼、接著編譯和打包來完善該外掛程式。 查看一下類,你會發現它實際上沒有做什麼操作。添加菜單選項的代碼在哪兒呢?架構組件從plugin.xml檔案包含的資訊中簡單地產生了必要的代碼。你可以查看一下這個檔案。它的最後一部分包含了一個擴充列表,這是這些類可以插入Eclipse的地方。 上面過程中產生的項目是範例程式碼的一部分,你可以下載。 |
| 運行和調試 你可以在一個特殊的沙箱(sandbox)--運行時工作台(runtime workbench)中測試自己的外掛程式。使用這種方式的時候,即使運行時工作台崩潰了,Eclipse仍然能夠工作。通過點擊"預覽"頁面上的"載入運行 時工作台"或"在偵錯模式中載入運行時工作台"連結。第一次運行運行時工作台的時候,會建立eclipse/runtime-workbench- workspace檔案夾。它會啟動一個新的Eclipse執行個體,該執行個體與正常的Eclipse視窗非常相似(除了你的外掛程式可以使用了之外)。 但是你還是首先選擇檔案 -> 建立 -> 項目菜單和Java項目來建立一個Java項目。這個項目的名稱叫做Test。圖6顯示了帶有我們建立的嚮導和編輯器的運行時工作台。
現在我們看一下Invokatron嚮導。從菜單檔案->建立 -> 其它 可以看到它。查看類別Invokatron嚮導。選擇Invokatron嚮導,接著點擊"下一步"。這個嚮導會建立一個空的Invokatron文檔。 在Container(容器)欄位中選擇Test項目並點擊"完成"。一個新的Invokatron編輯器顯示出來了。這個編輯器有三個頁面:一個文本編 輯頁面、一個屬性頁面(字型選擇)和一個預覽頁面(排序的、用選擇的字型繪製的)。 支援檔案 你可以在很多位置指定自己的外掛程式在編譯和運行時所需要的檔案。這使我們這些Eclipse使用者感到很困惑。我們試圖澄清這些問題。 支援檔案分為三類: 1、來自外掛程式代碼自身的類和資源。它們在建立過程中就會被打包為一個或多個.jar檔案。 2、編譯和運行外掛程式所需要的類和資源。它們都應該被包含在類路徑中,並且我們必須指明在匯出的時候需要複製這些檔案。 3、與外掛程式一起包含進來的檔案(例如readme.txt檔案)。它們不在類路徑中。 在外掛程式編輯器的"建立(Build)"頁面中可以設定編譯環境。此外,這些設定會映射為build.properties檔案。在第一次看到這個頁面的時候我們可能會感到困惑,因為它有四個分開的部分: · 運行時資訊:列出了產生的庫檔案(第1類檔案)。通常,在一個庫檔案中包含了外掛程式所需要的所有類,但是你可能希望把它分割成更小的塊。 · Source Build:列出應該被包含到.jar檔案中的類檔案(第1類檔案的輸入) · Binary Build:列出應該被複製到匯出的外掛程式檔案夾或檔案檔案中的檔案(第3類檔案)。上面的選擇框被選中的時候,產生的檔案會被自動地包含進來。 · 精確的類路徑項:列出了在編譯時間刻你的應用程式所需要的.jar檔案(第2類檔案)。這些檔案會被自動地添加到你的項目庫中。我們通常容易犯的一個錯誤是在"屬性"頁面中的"Java建立路徑"中和這個列表中同時包含了某個.jar檔案。 如果你的外掛程式使用了某個特殊的庫,就必須確保把這個庫添加到項目中。接著把它添加到Source Build和精確的類路徑項中。 外掛程式編輯器的其它一些重要的屬性頁面有: · 依賴關係(Dependencies):如果你的外掛程式依賴於其它的外掛程式,你就必須在這兒指定。 · 運行時(Runtime):在這個屬性頁面中你可以為外掛程式指定特殊行為。 匯出 外掛程式編碼完成了,並且在工作台中測試過之後,就該準備部署到"真實的" Eclipse環境中了。要實現這個步驟,需要返回"預覽"頁面並點擊"匯出嚮導"連結。"匯出選項"對話方塊允許你從三種部署類型中選擇一個: · 目錄結構:把檔案部署到一個目錄中供Eclipse立即使用。接著你可以把目標位置(Destination)設定為本地的Eclipse檔案夾(例如c:/dev/eclipse),直接地使用外掛程式。 · 單個.zip檔案:相同的檔案夾會被壓縮為一個.zip檔案,準備好發布給客戶。接下來,你必須把這個檔案解壓到Eclipse最上層的檔案夾來安裝外掛程式。你必須在檔案名稱欄位中指定.zip檔案名稱。 · 更新網站使用的獨立.jar文檔檔案:產生一個與Eclipse用於自動更新系統相相容的.jar檔案。 你點擊"完成"之後,會產生我們選中的輸出。如果你把輸出作為目錄結構,就必須重新啟動Eclipse以啟用該外掛程式。 |
查看樣本和原始碼
關於如何編寫Eclipse外掛程式的最好資訊來源是Eclipse所提供的外掛程式樣本集。如果我只能選擇一個輔助自己編寫外掛程式的資訊來源,我一定選擇它。
如果你要下載這些外掛程式,只需要訪問Eclipse下載頁面並選擇最新的版本。接著看這個頁面的中間,有一個"樣本外掛程式",請下載這些.zip檔案(小於 2MB)。把這些檔案解壓到Eclipse所在的檔案夾(例如c:/dev)中。這個步驟會在eclipse/features和 eclipse/plugins下建立很多檔案夾。這些樣本的原始碼在C:/dev/eclipse/plugins檔案夾的大量.zip檔案中,如下所 示:
| 樣本 |
代碼位置 |
| SWT樣本 |
在org.eclipse.sdk.examples.source_3.0.1/src...檔案夾下 |
| 獨立的 |
|
· 地址薄 · 剪貼簿 · 檔案查看器 · Hello World · 懸浮協助 · 映像分析器 · Java文法查看器 · 文字編輯器 |
.../org.eclipse.swt.examples_3.0.0/swtexamplessrc.zip 與工作台整合的 |
| · 瀏覽器 |
.../org.eclipse.swt.examples.browser_3.0.0/ browserexamplesrc.zip |
| · 控制項 |
.../org.eclipse.swt.examples.controls_3.0.0/controlssrc.zip |
| · SWT載入程式 |
.../org.eclipse.swt.examples.launcher_3.0.0/launchersrc.zip |
| · 布局 |
.../org.eclipse.swt.examples.layouts_3.0.0/layoutssrc.zip |
| · 繪圖 |
.../org.eclipse.swt.examples.paint_3.0.0/paintsrc.zip |
| · OLE |
特殊檔案夾: org.eclipse.sdk.examples.source.win32.win32.x86_3.0.1/ src/org.eclipse.swt.examples.ole.win32_3.0.0/ olewin32src.zip |
| 工作台樣本 |
|
| · Java編輯器 |
.../org.eclipse.ui.examples.javaeditor_3.0.0/ javaeditorexamplesrc.zip |
| · 模板編輯器 |
.../org.eclipse.ui.examples.javaeditor_3.0.0/ templateeditorexamplesrc.zip |
| · 多頁面編輯器 |
.../org.eclipse.ui.examples.multipageeditor_2.1.0</ multipageeditorsrc.zip |
| · 屬性工作表 |
.../org.eclipse.ui.examples.propertysheet_2.1.0/ propertysheetsrc.zip |
| · Readme工具 |
.../org.eclipse.ui.examples.readmetool_2.1.0/readmetoolsrc.zip |
| 協助樣本 |
特殊檔案夾: org.eclipse.help.examples.ex1_3.0.0(沒有Java檔案;HTML在doc.zip之中) |
| Team樣本 |
|
· 知識庫提供者 · 同步共用 |
.../org.eclipse.team.examples.filesystem_3.0.0/ teamfilesystemsrc.zip |
| 檔案比較樣本 |
|
| · 結構比較 |
.../org.eclipse.compare.examples_3.0.0/ compareexamplessrc.zip |
| · XML比較 |
.../org.eclipse.compare.examples.xml_3.0.0/ xmlcompareexamplessrc.zip |
還存在一些GEF和Draw2D外掛程式的有用樣本。你可以訪問GEF頁面並下載最新版本。在版本發佈頁面中間有"GEF樣本",請下載該.zip檔案。在 寫作本文的時候,該檔案是GEF-examples-3.0.1.zip(0.5MB)。把這個檔案解壓到Eclipse所在的檔案夾中。你將看到下面兩 個樣本:
| 樣本 |
代碼位置 |
| · 邏輯圖表示例 |
org.eclipse.gef.examples.source_3.0.1/src/ org.eclipse.gef.examples.logic_3.0.0/logicsrc.zip |
| · 流圖表示例 |
org.eclipse.gef.examples.source_3.0.1/src/ org.eclipse.gef.examples.flow_3.0.1/flowsrc.zip |
尋找外掛程式開發的資訊
你首先查看的位置應該是本文前面部分中的樣本。其次還有協助系統,它的品質也非常高。相關的內容還有:
· 平台外掛程式開發
· JTD外掛程式開發
· PDE指導
· Draw2D開發人員指導
· GEF開發人員指導
結論
現在你已經有了建立Eclipse圖形化外掛程式的足夠資訊了。有了這麼多類庫的協助,只有你的想象力會限制你的作為了。其秘訣在於你要知道自己能夠使用那些工具,並且使用正確的工具完成適當的工作。