在本文中
David Gallardo 向您展示了如何使用 Plug
in Development Environment 的代碼生成向導來創建Eclipse插件
您將學到如何在運行時工作台中運行和調試插件
並且在 Eclipse 中安裝完成的插件
David還研究了與打包插件相關的問題
包括維護版本信息
以插件片段的形式更新功能
以及組合插件來創建完整的功能部件
基於插件的體系結構 Eclipse平台是IBM向開發源碼社區捐贈的開發框架
它之所以出名並不是因為IBM宣稱投入開發的資金總數 —
千萬美元—而是因為如此巨大的投入所帶來的成果
一個成熟的
精心設計的以及可擴展的體系結構
Eclipse的價值是它為創建可擴展的集成開發環境提供了一個開放源碼平台
這個平台允許任何人構建與環境和其它工具無縫集成的工具
工具與 Eclipse 無縫集成的關鍵是插件
除了小型的運行時內核之外
Eclipse 中的所有東西都是插件
從這個角度來講
所有功能部件都是以同等的方式創建的
從這個角度來講
所有功能部件都是以同等的方式創建的
但是
某些插件比其它插件更重要些
Workbench 和 Workspace 是 Eclipse 平台的兩個必備的插件 — 它們提供了大多數插件使用的擴展點
如圖
所示
插件需要擴展點才可以插入
這樣它才能運行
圖 Eclipse Workbench 和 Workspace必備的插件支持 Workbench 組件包含了一些擴展點
例如
允許您的插件擴展 Eclipse 用戶界面
使這些用戶界面帶有菜單選擇和工具欄按鈕
請求不同類型事件的通知
以及創建新視圖
Workspace 組件包含了可以讓您與資源(包括項目和文件)交互的擴展點
當然
其它插件可以擴展的Eclipse組件並非只有Workbench和Workspace
此外
還有一個Debug 組件可以讓您的插件啟動程序
與正在運行的程序交互
以及處理錯誤 — 這是構建調試器所必需的
雖然 Debug 組件對於某些類型的應用程序是必需的
但大多數應用程序並不需要它
還有一個 Team 組件允許 Eclipse 資源與版本控制系統(VCS)交互
但除非您正在構建 VCS 的 Eclipse 客戶機
否則 Team 組件
就象 Debug 組件一樣
不會擴展或增強它的功能
最後
還有一個Help組件可以讓您提供應用程序的聯機文檔和與上下文敏感的幫助
沒有人會否認幫助文檔是專業應用程序必備的部分
但它並不是插件功能的必要部分
上述每個組件提供的擴展點都記錄在 Eclipse Platform Help 中
該幫助在 Platform Plug
in Developer 指南的參考部分中
乍一看
尤其是 API 參考大全的 Workbench 部分
一開始會令人望而卻步
我們不會深入了解眾多可用擴展點的詳細信息
而只是粗略地看一個簡單插件及其組件
插件簡介 創建插件最簡單的方法是使用 Plug
in Development Environment(PDE)
PDE 和 Java Development Tooling(JDT)IDE 是 Eclipse 的標准擴展
PDE 提供了一些向導以幫助創建插件
包括我們將在這裡研究的
Hello
world
示例
從 Eclipse 菜單
選擇 File=>New=>Other(或按 Ctrl
N)
然後選擇 Select 對話框左邊的 Plug
in Development 向導
在 Select 對話框的右邊
選擇 Plug
in Project
按 Next
在下一屏上
輸入項目名稱
我使用了 com
example
hello
再次按 Next
在下一屏上
請注意
插件標識就與項目名稱相同
使用項目名稱作為插件標識可以將該插件與另一個插件的名稱發生沖突的機會減到最小
再按一次 Next
下一屏讓您選擇是手工創建初始插件代碼
還是運行代碼生成向導
保留代碼生成向導的缺省選項
選擇
Hello
World
然後按 Next
如圖
所示
educitycn/img_///gif> 圖 選擇Hello World代碼生成向導 下一屏要求一些附加信息
請注意這一屏上的信息
它包含了插件名稱
版本號
提供者名稱和類名
這些是關於插件的重要信息
我們將在稍後研究
可以接受向導提供的缺省值
按Next
在下一屏幕上
接受包名
類名和消息文本的缺省值
選擇
Add the action set to the resource perspective
復選框
按 Finish
如果接到通知
向導需要啟用某些其它插件才能完成
那麼按 OK
過一會兒
向導將完成
而在您的工作區中將會有一個新的項目
名為 com
example
hello
如圖
所示
educitycn/img_///gif> 圖 PDE 透視圖Welcome to Hello Plugin 在Package Explorer中
工作台的左邊是向導創建的一些東西的概述
大多數項都不引人關注
包括項目類路徑中的許多
jar文件(這些包括插件和Java運行時所需的Eclipse類)
一個圖標文件夾(包含了工具欄按鈕的圖形)
以及 build
properties 文件(包含自動構建腳本所使用的變量)
這裡最有意思的東西是 src 文件夾
它包含了插件和 plugin
xml 文件的源代碼 — plug
in
xml 是插件的清單文件
我們將先查看 plugin
xml
插件清單文件 插件清單文件 plugin
xml 包含了 Eclipse 將插件集成到框架所使用的描述信息
缺省情況下
當第一次創建插件時
會在清單編輯器區域中打開 plugin
xml
編輯器底部的選項卡讓您可以選擇關於插件的不同信息集合
Welcome 選項卡顯示了消息
Welcome to Hello Plug
In
並且簡要討論了所使用的模板和關於使用 Eclipse 實現插件的提示
選擇
Source
選項卡可以讓您查看 plugin
xml 文件的完整源代碼
讓我們看看插件清單文件的各個部分
首先是關於插件的常規信息
包括它的名稱
版本號
實現它的類文件的名稱和
jar 文件名
清單
插件清單文件 — 常規信息
<?xmlversion=
encoding=
UTF
?>
<plugin
id=
com
example
hello
name=
Hello Plug
in
version=
provider
name=
EXAMPLE
class=
com
example
hello
HelloPlugin
>
<runtime>
<library name=
hello
jar
/>
</runtime>
接著
列出了我們的插件所需的插件
清單
插件清單文件 — 必需的插件
<requires>
<import plugin=
re
resources
/>
<import plugin=
org
eclipse
ui
/>
</requires>
列出的第一個插件re
resources是工作區插件
但實際上我們的插件並不需要它
第二個插件 org
eclipse
ui 是工作台
我們需要工作台插件
因為我們將擴展它的兩個擴展點
正如後面的 extension 標記所指出的
[/img][/code]
educitycn/img_///gif> 圖 定制 Resource 透視圖 操作集合包含了兩個標記
menu標記(描述菜單項應該出現在工作台菜單的什麼位置
以及如何出現)和action標記(描述它應該做什麼)—尤其是action標記標識了執行操作的類
注
這個類不是上面列出的插件類
清單
操作集合
<extension
point=
org
eclipse
ui
actionSets
>
<actionSet
label=
Sample Action Set
visible=
true
id=
com
example
hello
actionSet
>
<menu
label=
Sample &Menu
id=
sampleMenu
>
<separator
name=
sampleGroup
>
</separator>
</menu>
<action
label=
&Sample Action
icon=
icons/sample
gif
class=
com
example
hello
actions
SampleAction
tooltip=
Hello
Eclipse world
menubarPath=
sampleMenu/sampleGroup
toolbarPath=
sampleGroup
id=
com
example
hello
actions
SampleAction
>
</action>
</actionSet>
</extension>
許多菜單和操作屬性的目的相當明顯 — 例如
提供工具提示文本和標識工具欄項的圖形
但還要注意 action 標記中的 menubarPath
這個屬性標識了 menu 標記中定義的哪個菜單項調用 action 標記中定義的操作
有關這個和其它工作台擴展點的詳細信息
請參考 Platform Plug
in Developer Guide
尤其是
Plugging into the workbench
章節(可以從 Eclipse 的幫助菜單中獲取該指南)
由於我們選擇了將插件添加到 Resource 透視圖
於是生成了第二個 extension 標記
這個標記會導致當 Eclipse 第一次啟動並裝入我們的插件時
將插件添加到 Resource 透視圖
清單
extension 標記
<extension
point=
org
eclipse
ui
perspectiveExtensions
>
<perspectiveExtension
targetID=
org
eclipse
ui
resourcePerspe
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28258.html