Eclipse插件終極攻略(一):基本概念介紹

在這個系列的第一部分裏,將對Eclipse和插件的概要、插件開發的基本概念、OSGi和SWT進行簡單介紹。

1.Eclipse的架構

Eclipse被作爲java的IDE(集成開發環境)被廣泛的應用,但是從本質上看Eclipse是一個整合了各種開發工具的平臺。因此,它採用了可以自由的增加各種功能的插件架構技術。Eclipse平臺的基本架構如圖1-1所示。

Eclipse的架構  
圖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的第一次接觸。



發佈了64 篇原創文章 · 獲贊 28 · 訪問量 49萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章