Eclipse是一個開放源代碼的、基於Java的可擴展的開發平台。就其本身而言,它只是一個框架、一組服務,用於通過插件來構建開發環境。當我們提到Eclipse的時候,許多Java開發者的第一反應就是那個性能良好,界面漂亮,Debug功能奇佳的Java集成開發平台。
無可否認,Eclipse常常作為一款優秀的IDE(Integrated Development Environment,集成開發環境)出現在開發者面前的。它不僅僅是Java的IDE,還可以是C語言的IDE、Python的IDE——只要開發出相應語言的插件,Eclipse就可以成為任何語言的IDE。但是,這些嚴格來說都是Eclipse RCP的應用。真正的Eclipse,是一個提供了一個完善的插件機制RCP(Rich ClIEnt Platform,胖客戶端平台)平台;它以SWT/JFace作為界面元素組件,提供給用戶一個名為Workbench的UI平台;加上它本身優秀的插件機制,它能夠構造出擴展能力強、性能優秀、並能提供給用戶良好UI體驗的服客戶端平台。
2、Eclipse RCP簡介
Eclipse RCP是一項位於Eclipse平台核心的功能。大多數人想到Eclipse時,會想到Java集成開發環境(IDE)。如果將Eclipse中關於IDE的內容剝去,剩下的就是一個提供基本工作台功能的核心,包括對可移動以及可疊加的窗口組件(編輯器和視圖)、菜單、工具欄、按鈕、表格、樹形結構等等的支持,而這個核心就是Eclipse RCP。
個人理解Eclipse RCP就是由插件開發轉向桌面應用開發,構建最小化的Eclipse平台(8M)運行你的桌面應用,不必再為程序框架煩心,擺脫失敗的AWT和Swing,讓程序擁有專業級效果,而實現又很簡單、很優雅。
RCP提供了豐富的界面控件,這使得基於 Java 開發桌面應用也變得容易了很多,雖然仍然不能和基於VB、Delphi進行相比。對於開發者而言,盡管使用 RCP 也是為了開發桌面應用,但 RCP 給開發者帶來的更多的感覺是在它充分發揮了插件化系統的優勢, RCP 可以視為基於 OSGi(Open Service Gateway Initiative) 構建插件化系統的最佳實踐的指導,從 RCP 的設計中,可以學習到如何將應用做到模塊化、將應用做到動態化,甚至還可以學習到如何自動生成界面這樣的設計思想。 RCP 可以看做是基於 OSGi 做插件化應用系統的最佳實踐,其中的不少設計方法甚至都可以整理成為基於 OSGi 做插件化應用系統的設計模式,讓我們進入 RCP 之旅,揭開面紗,一探其本質吧!相信大家在了解了 RCP 的設計思想,看過其代碼後,不得不對 RCP 表示崇高的敬意,大師之作,不同凡響。
Eclipse RCP為應用程序開發人員提供了:
◆應用程序和特性的一致且本地的外觀;
◆公共應用程序服務,例如窗口管理、更新管理、幫助和選擇管理;
◆本地的外觀,利用Windows、Mac OS X、Linux、Solaris、HP-UX、AIX和嵌入式設備上的實際平台窗口部件;
◆標准化的組件模型;
◆普及的可擴展性;
◆整合的更新機制;
◆頂級開發工具(Eclipse 軟件開發包(SDK)是世界級的軟件開發環境)。
Eclipse RCP項目用SWT圖形庫和工具包取代了Java標准中的AWT和Swing。SWT直接調用了操作系統的圖形庫,從而使得Java應用程序的LOOK & Feel 與操作系統的習慣完全一致;更為重要的是,對本地方法的直接調用大幅度的提高了基於SWT 的Java應用程序的運行速度。SWT 的缺點主要在於兩點:(1) 不是Java語言標准; (2) 支持的平台太少。
3、Eclipse RCP體系結構
一個Eclipse RCP可分為如下五個部分,如下圖所示:
圖1(1)Wrokbench工作台
為Eclipse提供用戶界面。它是使用SWT(Standard Widget Toolkit)和一個更高級的API(JFace)來構建的;SWT是Java的Swing/AWT GUI API的非標准替代者,JFace則建立在SWT基礎上,提供用戶界面組件。
(2)Workspace工作區
工作區是負責管理用戶資源的插件。它包括用戶創建的項目、項目中的文件,以及文件變更和其它資源。工作區還負責通知其它插件關於資源變更的信息,比如文件創建、刪除或者變更。
(3)Help幫助系統
幫助組建具有與Eclipse平台本身相當的可擴展能力。與插件向Eclipse添加功能相同,幫助提供一個附加的導航結構,允許工具以Html文件的形式添加文檔。
(4)Team團隊支持系統
團隊支持組件負責提供版本控制和配置管理支持。它根據需要添加視圖,以允許用戶與所有使用的任何版本控制系統交互。大多數插件都不需要與團隊支持組件交互,除非它們提供版本控制服務。
(5)Platform Runtime運行平台
平台運行庫是整個Eclipse的內核,它在啟動時檢查已安裝了哪些插件,並創建關於它們的注冊表信息。為降低啟動時間和資源使用,它在實際需要某個插件的時候才加載該插件。除了內核外,其它每樣東西都是作為插件來實現的。
Eclipse最明顯的一大優點就是即插即用、即刪即無。在構建插件化的應用系統的時候,我們通常希望做到以下三點:
(1)通過增加插件來動態擴展系統功能,包括功能的入口等,最重要的就是不要因為增加了新的插件,而導致對原插件的修改,做到即插即用, OSGi 本身提供了基於插件動態擴展系統功能的支持,但是否可以真的做到即插即用,是否可以不導致對原插件的修改,這個還是要看設計者的功力;
(2)通過刪除插件來動態移除系統功能,包括功能的入口等,最重要的就是要讓插件的卸載不影響到系統的運行,這個和 1 裡面所說的情況也是一樣的, OSGi 是可以支持這樣的要求,但應用系統是否能做到還是看設計者的功力;
(3)通過增加或更新插件來動態改變系統行為。
RCP基於OSGi來保證其插件化以及動態化可實現的情況下,還定義了擴展點的機制,而正是因為擴展點的機制,使得 RCP 在設計角度上能夠更好的達到我們構建插件化應用系統的前兩個目標,同時 RCP 通過其對桌面應用支撐的設計為我們展示了擴展點的最佳實踐方法,將界面按照對象的思想進行劃分,在劃分的過程中根據職責形成插件,暴露出擴展點,最後形成了像樹一樣的結構體系,如圖所示:
圖2這種設計方法最佳的一個地方就在於充分的做到了真正的即插即用、即刪即無的情況,典型的例子就是在 RCP 中可以通過擴展實現 Perspective ,將這個插件安裝上後就可以在 RCP 中看到這個 Perspective ,刪除這個插件後 RCP 中自然就看不到這個 Perspective 了。
從 RCP 的結構體系上,可以看出 RCP 在基於擴展點的設計思想上是怎麼去設計的,它的設計思路采取的就是從頂至下、按照職責進行劃分、形成插件的方法,插件中需要支持動態擴展的部分則做成擴展點,從而形成一個非常容易擴展的開發平台。
即插即用、即刪即無的支持使得系統可以很好的以插件的方式來進行組裝,做系統的時候就象在種樹,先把系統的根撒下,讓根長出主干,在主干上培育出枝葉,枝葉上結出果實,整顆樹就這麼培育成了,當不需要了某個果實的時候,把它摘下來吃了,當不需要了某顆枝葉的時候,把那顆枝葉砍了,而這都不會影響到主干,當希望樹上形成別的果實的時候,甚至都可以接上不同的枝葉,讓它長出不一樣的果實。
4、總結
目前,基於Eclipse開發的插件非常多,涉及到軟件領域的各個方面。但是,基於Eclipse RCP開發的獨立軟件並不常見,其中比較著名的幾款Eclipse RCP軟件有:
JLabrary:開源的CMS系統,用Eclipse RCP實現客戶端;
NOA Office Integration Editor:將Open Office集成到RCP上的一款辦公軟件;
Nomad PIM:一款建議的個人信息管理系統,可以對個人信息,例如日程、支出、日記等進行管理。
感興趣的讀者可以下載這些軟件的源代碼進行學習。另外Eclipse本身也具有十分詳細的RCP開發幫助文檔(都是英文的),充分利用這些資源將大大加快Eclipse RCP開發。