標籤:eclipse外掛程式 外掛程式 extension activator
在這個系列的第一部分裡,將對Eclipse和外掛程式的概要、外掛程式開發的基本概念、OSGi和SWT進行簡單介紹。
1.Eclipse的架構
Eclipse被作為java的IDE(整合式開發環境)被廣泛的應用,但是從本質上看Eclipse是一個整合了各種開發工具的平台。因此,它採用了可以自由的增加各種功能的外掛程式架構技術。Eclipse平台的基本架構1-1所示。
圖1-1 Eclipse的架構
在這裡,在最底層位置的是作為Eclipse外掛程式架構基乾的OSGi運行時。雖然在早期的Eclipse版本中已經開始使用外掛程式架構了,但是在Eclipse3.0的時候才首次引入了OSGi。OSGi是open services gateway initiative的簡稱、原本是一種為嵌入式硬體開發的,使網路上的服務提供者和使用者互動的註冊服務。Eclipse使用OSGi來進行外掛程式的管理。
OSGi運行時之上所有被配置的組件群都是以外掛程式的方式提供的。SWT和JFace提供了使用者介面(User Interface)的API。由於SWT和JFace並不依賴於Eclipse,也有可能被作為類庫單獨使用。Eclipse不僅把基本的使用者介面作為工作台API(WorkBench API)提供出來,在後面要講到的工作區(Workspace)內的資源通過資源API(Resource API)的形式也被作為基本API提供出來了。在這之上構建起了協助系統以及基於更新管理器的自動更新等功能。
從Eclipse平台的角度看,SWT、JFace、工作台的部分就是EclipseRCP(Rich Client Platform)。EclipseRCP是基於Eclipse的富用戶端技術,Eclipse不僅是一個開發工具,也可以作為一個通用的應用程式平台。EclipseRCP是Eclipse平台的子集,同時,Eclipse自身也是一個EclipseRCP的運用執行個體。
2.擴充點
外掛程式為了自身能夠對其他外掛程式進行擴充而提出了擴充點的概念。當要為外掛程式增加功能的時候就可以利用這個擴充點。在擴充點的基礎上,外掛程式之間可以互相串連。
圖1-2 使用擴充點進行擴充
擴充和擴充點的串連在程式執行時被建立,提供擴充點的外掛程式事先並不知道該擴充點實際被擴充了什麼樣的行為。使用擴充點的外掛程式需要在資訊清單檔(plugin.xml)中像代碼1-1那樣,使用extension元素宣告擴充。
extension元素中的schema由提供擴充點的外掛程式決定,元素中的內容必須按照schema進行書寫。
代碼1-1 plugin.xml中聲明擴充
<extension point="被使用擴充點的ID"> ...... </extension>
像上面這樣的擴充點和擴充不斷的積累重疊,使得Eclipse平台能夠實現各種各樣的功能。Eclipse平台提供的擴充點有
◆增加功能表項目
◆增加視圖
◆增加編輯器
等等,數量非常的多。本文將以使用頻率相對較高的擴充點為中心進行介紹,在Eclipse的協助中有Eclipse提供的所有擴充點的說明,大家在使用時可以參考。
當然,定義一個新的自製外掛程式是絕對可能的。擴充點的定義方法會在[擴充點定義]章節中為大家詳細介紹。
3.工作台(Workbench)
在這裡認為看到本文的同學們都曾經用Eclipse做過Java的開發。Eclipse的各個部分的名稱大家也許都已經知道了。為了在以後的文章中統一意識,在這裡我們再複習一下。
工作台是Eclipse的整個使用者介面的統稱。工作台內的結構見圖1-3
圖1-3 工作台
工作台視窗
Eclipse的視窗。通常一個工作台會開啟一個視窗,但是也可能一個工作台對應多個視窗。
工作台頁面
在工作台上開啟的每個透視圖(用於特定用途的視圖、編輯器的布局)和一個頁面對應。可以包含多個視圖和編輯器。
功能表列
和一般的GUI應用一樣的功能表列地區。
工具列
和一般的GUI應用一樣的工具列地區。預設情況下工具列的右邊地區用來顯示透視圖的列表
狀態列
通常在畫面的最下面顯示的地區。編輯器的游標位置、產生進度狀況等根據工作台上的操作內容顯示各種資訊。
視圖
作用是提供開發人員想要的資訊。可以收到狀態列內,必要時再開啟(高速視圖)。基本上一個視圖在一個工作台內只能開啟一個。
編輯器
主要用於檔案的編輯。和視圖不同編輯器可以同時開啟多個。對於同一個檔案也可以開啟多個編輯器。
從外掛程式的代碼中訪問工作台使用org.eclipse.ui.PlatformUI類。代碼1-2說明了從PlatformUI中取得工作台和工作台視窗的程式碼範例。
代碼1-2 使用PlatformUI訪問工作台
//取得工作台 IWorkbench workbench = PlatformUI.getWorkbench(); //取得工作台視窗 IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); //取得工作台頁面 IWorkbenchPage page = window.getActivePage(); //取得當前處於活動狀態的編輯器視窗 IEditorPart part = page.getActiveEditor();
4.工作區和資源API
在Eclipse中使用工作區作為開發人員的作業地區。工作區是在Eclipse啟動時指定的一個物理檔案夾。開發人員在Eclipse上產生工程、建立檔案等操作都會在工作區指定的檔案夾內產生實際的檔案。
工作區內的資源在Eclipse內部使用org.eclipse.core.resources包中定義的虛擬對象進行操作,例如工程是IProject、檔案夾是IFolder、檔案時IFile。
圖1-4 工作區內的資源
在外掛程式開發的時候很多情況都會使用到工作區內的檔案或者檔案夾。這時就可以使用這些對象。
對工作區的訪問需要使用org.eclipse.core.resources.ResourcesPlugin。代碼1-3是利用IWorkspaceRoot,取得工作區內的工程的程式碼範例
代碼1-3 使用ResourcesPlugin訪問工作區
//取得工作區的root IWorkspaceRoot wsroot = ResourcesPlugin.getWorkspace().getRoot(); //取得項目 IProject[] projects = wsroot.getProjects();
工作台和資源訪問的API是Eclipse提供的API中最基本的,在外掛程式開發時使用頻率較高的API。在這裡不做詳細的說明,在以後得例子中會出現一些這樣的API。使用PlatformUI作為工作台訪問的進入點和使用ResourcesPlugin作為工作區訪問的進入點,是無論如何也要記住的。
在Eclipse中使用PDE(Plugin Development Environment)進行外掛程式開發。在PDE中為大家準備了幾個模板供大家參考。第一步咱們先利用模板製作一個簡單的外掛程式作為和PDE的第一次接觸。