初學(xué) Eclipse RCP
??? 作者:Flyingis
??? 以前一直做WebGIS方面的工作,對(duì)桌面關(guān)心甚少。桌面開發(fā)讓人第一個(gè)想到的是VB6的快速開發(fā),以及VC++平臺(tái)中對(duì)效率的追求,VB.NET似乎找不到一個(gè)合適的定位。自己以后想逐步轉(zhuǎn)向桌面,畢竟桌面才是GIS的天下,在效率、可擴(kuò)展性、開發(fā)速度以及平臺(tái)可持續(xù)發(fā)展中權(quán)衡,讓我選擇了Eclipse RCP。
??? 說向桌面轉(zhuǎn)型而選擇Eclipse RCP有些片面,因?yàn)樽烂骈_發(fā)僅僅是Eclipse RCP開發(fā)的一個(gè)子集,用Eclipse RCP進(jìn)行Web開發(fā)同樣可以。Eclipse RCP是一個(gè)基礎(chǔ)應(yīng)用平臺(tái),在這個(gè)平臺(tái)上,我們可以方便的擴(kuò)展自己的應(yīng)用、快速開發(fā)自己的程序、統(tǒng)一應(yīng)用程序的界面等等,按照官方的話來說,Eclipse RCP開發(fā)的特點(diǎn)在于:
??? 1.組件式的架構(gòu):所有的業(yè)務(wù)功能都可以設(shè)計(jì)為可以重用的插件,插件之間的相互訪問與重組,就構(gòu)成了系統(tǒng)的業(yè)務(wù)模塊。其中最典型的應(yīng)用,就是通過插件來增強(qiáng)Eclipse Java IDE的功能。
??? 2.將程序關(guān)注的重點(diǎn)集中在業(yè)務(wù)領(lǐng)域:Eclipse RCP本身就基于Eclipse插件體系結(jié)構(gòu),基于這個(gè)統(tǒng)一的架構(gòu),程序員可以很方便的開發(fā)出自己的客戶端應(yīng)用,將主要精力放在業(yè)務(wù)邏輯的實(shí)現(xiàn)。
??? 3.適應(yīng)需求的變化:Eclipse就是由插件搭建而成的,通過增減插件,我們可以很容易的實(shí)現(xiàn)業(yè)務(wù)功能的變更。為Eclipse加入中文包就是最好的例子,通過.link文件對(duì)中文包文件的引用,可以實(shí)現(xiàn)Eclipse的中文本地化,當(dāng)我們需要將語言恢復(fù)為英文時(shí),只需刪除對(duì)應(yīng)的.link文家即可。
??? Eclipse體系的核心是插件,3.0版本以后Eclipse開始采用OSGI作為其插件體系結(jié)構(gòu)實(shí)現(xiàn)的基礎(chǔ),OSGI是一套開放的標(biāo)準(zhǔn),這樣可以增強(qiáng)網(wǎng)絡(luò)范圍內(nèi)的互操作性,每個(gè)Eclipse插件就是一個(gè)OSGI的模塊。OSGI模塊中最重要的是Bundle和Service,Bundle是插件管理器,Service是這個(gè)模塊可以暴露對(duì)外的服務(wù)對(duì)象。每個(gè)Bundle擁有自己的ClassLoader以及context,通過context可進(jìn)行服務(wù)的注冊(cè)、卸載等。啟動(dòng)時(shí)Eclipse核心會(huì)檢查所有的插件并注冊(cè),但是直到被調(diào)用,該插件才會(huì)被實(shí)例化,這個(gè)過程就是懶加載。
??? 在OSGI之上的是Runtime,它提供了Application模型和擴(kuò)展機(jī)制。
??? 和OSGI框架和JVMs一樣,Eclipse Runtime需要知道做什么。運(yùn)行Eclipse,首先需要構(gòu)建一個(gè)Application,它和Java程序中的main方法類似,Runtime啟動(dòng)后,程序需要找到指定的Application,Application通過擴(kuò)展來定義,該擴(kuò)展指定一個(gè)類(擴(kuò)展點(diǎn))作為主程序的入口。Application必須實(shí)現(xiàn)IplatformRunable接口,由此接口提供的run方法接管Eclipse平臺(tái)的控制權(quán),當(dāng)Application結(jié)束時(shí),Eclipse平臺(tái)也會(huì)退出。
??? Products運(yùn)行于Application之上,它主要提供典型應(yīng)用程序的基本界面的實(shí)現(xiàn),例如閃屏、windows圖標(biāo)等。一個(gè)Eclipse安裝中可能存在多個(gè)Application和Product,但是在同一時(shí)刻只能運(yùn)行一個(gè)Application和一個(gè)Product。
??? 各種插件添加到Eclipse RCP是通過擴(kuò)展來實(shí)現(xiàn)的,擴(kuò)展的創(chuàng)建必須遵循擴(kuò)展點(diǎn)(Extension Point)定義的規(guī)范進(jìn)行明確的聲明,我們可以使用Eclipse提供的現(xiàn)成的擴(kuò)展點(diǎn),還可以定義新的擴(kuò)展點(diǎn),并在此基礎(chǔ)上進(jìn)行擴(kuò)展。Eclipse平臺(tái)上常見的擴(kuò)展點(diǎn)有:actionSets、editor、popUpMenu、views、perspectives、propertyPages等等。
??? 關(guān)于Eclipse中的插件類型:
??? Eclipse是各種插件的集合,但總體而言,插件開發(fā)有兩種提供方式,一種是插件集構(gòu)建的應(yīng)用,擁有自己的程序入口,如Eclipse平臺(tái)在Windows下通過點(diǎn)擊eclipse.exe可以進(jìn)入。另一種是以擴(kuò)展的方式提供的插件集,它們通常不是完整的,也沒有自己的程序入口,僅用以加入到已存在的平臺(tái)中進(jìn)行輔助性的開發(fā),如GEF、EMF、CDT等。
??? 參考資料:
??? 《Eclipse Rich Client Platform:Designing,Coding,and Packaging JavaTM Applications》
??? 《程序員》2006年5月刊
??? http://www.eclipseworld.org/
??? 以前一直做WebGIS方面的工作,對(duì)桌面關(guān)心甚少。桌面開發(fā)讓人第一個(gè)想到的是VB6的快速開發(fā),以及VC++平臺(tái)中對(duì)效率的追求,VB.NET似乎找不到一個(gè)合適的定位。自己以后想逐步轉(zhuǎn)向桌面,畢竟桌面才是GIS的天下,在效率、可擴(kuò)展性、開發(fā)速度以及平臺(tái)可持續(xù)發(fā)展中權(quán)衡,讓我選擇了Eclipse RCP。
??? 說向桌面轉(zhuǎn)型而選擇Eclipse RCP有些片面,因?yàn)樽烂骈_發(fā)僅僅是Eclipse RCP開發(fā)的一個(gè)子集,用Eclipse RCP進(jìn)行Web開發(fā)同樣可以。Eclipse RCP是一個(gè)基礎(chǔ)應(yīng)用平臺(tái),在這個(gè)平臺(tái)上,我們可以方便的擴(kuò)展自己的應(yīng)用、快速開發(fā)自己的程序、統(tǒng)一應(yīng)用程序的界面等等,按照官方的話來說,Eclipse RCP開發(fā)的特點(diǎn)在于:
??? 1.組件式的架構(gòu):所有的業(yè)務(wù)功能都可以設(shè)計(jì)為可以重用的插件,插件之間的相互訪問與重組,就構(gòu)成了系統(tǒng)的業(yè)務(wù)模塊。其中最典型的應(yīng)用,就是通過插件來增強(qiáng)Eclipse Java IDE的功能。
??? 2.將程序關(guān)注的重點(diǎn)集中在業(yè)務(wù)領(lǐng)域:Eclipse RCP本身就基于Eclipse插件體系結(jié)構(gòu),基于這個(gè)統(tǒng)一的架構(gòu),程序員可以很方便的開發(fā)出自己的客戶端應(yīng)用,將主要精力放在業(yè)務(wù)邏輯的實(shí)現(xiàn)。
??? 3.適應(yīng)需求的變化:Eclipse就是由插件搭建而成的,通過增減插件,我們可以很容易的實(shí)現(xiàn)業(yè)務(wù)功能的變更。為Eclipse加入中文包就是最好的例子,通過.link文件對(duì)中文包文件的引用,可以實(shí)現(xiàn)Eclipse的中文本地化,當(dāng)我們需要將語言恢復(fù)為英文時(shí),只需刪除對(duì)應(yīng)的.link文家即可。
??? Eclipse體系的核心是插件,3.0版本以后Eclipse開始采用OSGI作為其插件體系結(jié)構(gòu)實(shí)現(xiàn)的基礎(chǔ),OSGI是一套開放的標(biāo)準(zhǔn),這樣可以增強(qiáng)網(wǎng)絡(luò)范圍內(nèi)的互操作性,每個(gè)Eclipse插件就是一個(gè)OSGI的模塊。OSGI模塊中最重要的是Bundle和Service,Bundle是插件管理器,Service是這個(gè)模塊可以暴露對(duì)外的服務(wù)對(duì)象。每個(gè)Bundle擁有自己的ClassLoader以及context,通過context可進(jìn)行服務(wù)的注冊(cè)、卸載等。啟動(dòng)時(shí)Eclipse核心會(huì)檢查所有的插件并注冊(cè),但是直到被調(diào)用,該插件才會(huì)被實(shí)例化,這個(gè)過程就是懶加載。
??? 在OSGI之上的是Runtime,它提供了Application模型和擴(kuò)展機(jī)制。
??? 和OSGI框架和JVMs一樣,Eclipse Runtime需要知道做什么。運(yùn)行Eclipse,首先需要構(gòu)建一個(gè)Application,它和Java程序中的main方法類似,Runtime啟動(dòng)后,程序需要找到指定的Application,Application通過擴(kuò)展來定義,該擴(kuò)展指定一個(gè)類(擴(kuò)展點(diǎn))作為主程序的入口。Application必須實(shí)現(xiàn)IplatformRunable接口,由此接口提供的run方法接管Eclipse平臺(tái)的控制權(quán),當(dāng)Application結(jié)束時(shí),Eclipse平臺(tái)也會(huì)退出。
??? Products運(yùn)行于Application之上,它主要提供典型應(yīng)用程序的基本界面的實(shí)現(xiàn),例如閃屏、windows圖標(biāo)等。一個(gè)Eclipse安裝中可能存在多個(gè)Application和Product,但是在同一時(shí)刻只能運(yùn)行一個(gè)Application和一個(gè)Product。
??? 各種插件添加到Eclipse RCP是通過擴(kuò)展來實(shí)現(xiàn)的,擴(kuò)展的創(chuàng)建必須遵循擴(kuò)展點(diǎn)(Extension Point)定義的規(guī)范進(jìn)行明確的聲明,我們可以使用Eclipse提供的現(xiàn)成的擴(kuò)展點(diǎn),還可以定義新的擴(kuò)展點(diǎn),并在此基礎(chǔ)上進(jìn)行擴(kuò)展。Eclipse平臺(tái)上常見的擴(kuò)展點(diǎn)有:actionSets、editor、popUpMenu、views、perspectives、propertyPages等等。
??? 關(guān)于Eclipse中的插件類型:
??? Eclipse是各種插件的集合,但總體而言,插件開發(fā)有兩種提供方式,一種是插件集構(gòu)建的應(yīng)用,擁有自己的程序入口,如Eclipse平臺(tái)在Windows下通過點(diǎn)擊eclipse.exe可以進(jìn)入。另一種是以擴(kuò)展的方式提供的插件集,它們通常不是完整的,也沒有自己的程序入口,僅用以加入到已存在的平臺(tái)中進(jìn)行輔助性的開發(fā),如GEF、EMF、CDT等。
??? 參考資料:
??? 《Eclipse Rich Client Platform:Designing,Coding,and Packaging JavaTM Applications》
??? 《程序員》2006年5月刊
??? http://www.eclipseworld.org/
posted on 2006-12-13 19:22 Flyingis 閱讀(3494) 評(píng)論(1) 編輯 收藏 所屬分類: Eclipse Plugin