因?yàn)橛蠨UDU~所以我們一群幸福的Blogger。
周六m.tkk7.com早上10:00準(zhǔn)時(shí)停止服務(wù)了~,原本我以為可以安安靜靜的等待重新恢復(fù),但是我錯(cuò)了,從昨天開始就出現(xiàn)了焦躁不安的情緒,總感覺這個(gè)世界此時(shí)好像少了什么東西,每次打開馬桶都習(xí)慣的點(diǎn)擊一下自己的Blog連接,但是在過去的幾十個(gè)小時(shí)里~我的無法平靜!
今天一大早起來,下了一個(gè)Eclipse3.3RC4玩,發(fā)現(xiàn)Eclipse團(tuán)隊(duì)修改掉了過去的BUG,而且在Eclipse3.3里面為RCP開發(fā)提供了更好的東東~本想開Blog記錄一下,但是轉(zhuǎn)念一下,關(guān)了!只能等待,無聊間,繼續(xù)玩我的大富翁(尋找一下炒股的快感!)一口氣玩到現(xiàn)在。上網(wǎng)看看,發(fā)現(xiàn)Blog已經(jīng)搞好了~dudu就是dudu,說話算數(shù)!隨性寫文一篇,紀(jì)念一下“關(guān)站2日門”~
Eclipse3.3的新特性,待明日補(bǔ)上!
摘要: 感謝大家最近對(duì)本系列的關(guān)注和評(píng)論,我會(huì)繼續(xù)完善內(nèi)容,并且總結(jié)教訓(xùn)寫出更好的東東來。 今天談?wù)勛罱谘芯康腞CP安全模型,其實(shí)RCP在誕生之初就是建立在一個(gè)非常魯棒的框架之上的---OSGi,它不但有全新的概念,全新的思路,全新的熱插拔技術(shù),還有非常好的安全模型(equinox security 項(xiàng)目好像還在孵化中)... 閱讀全文
感謝大家對(duì)上一篇文章的拍磚,引起的反響不小,目的達(dá)到了~
,希望可以繼續(xù)板兒磚橫飛!
今天來說說第三方JAR包的引入。RCP開發(fā)(或者plugin開發(fā))中最讓人頭疼就是第三方JAR包的引入了,很多初學(xué)的朋友常常頭疼,介紹的文章也不少了,如果搞不定,自己google一下就可以了。
為什么第三方JAR包會(huì)引發(fā)如此眾多的問題,其實(shí)并不是Eclipse的錯(cuò),而是先入為主的錯(cuò)。如果你一開始就就接觸Eclipse開發(fā),以后再做不同java開發(fā),你就會(huì)覺得java的類加載機(jī)制是變態(tài)了~Eclipse的類加載機(jī)制是基于OGSI的實(shí)現(xiàn),它完成了插件的獨(dú)立加載和獨(dú)立維護(hù),正是因?yàn)檫@種變態(tài)的類加載機(jī)制,才有了我們頭大的第三方j(luò)ar包的問題,也正是這種偉大的類加載機(jī)制,才有了即插即用的思路的誕生。
大多數(shù)簡(jiǎn)單的RCP項(xiàng)目都是將所有的JAR包放入本地項(xiàng)目中,然后直接進(jìn)引入項(xiàng)目路徑,就開始整了,對(duì)于小的應(yīng)用,或者開發(fā)人員少的情況下,這樣是可行的,也是便捷的~但是RCP的目標(biāo)是大型的企業(yè)級(jí)應(yīng)用,一個(gè)系統(tǒng)由十幾個(gè),幾十個(gè)插件組成,是很正常的。所以就要求我們將RCP中所有用到的第三方JAR包統(tǒng)一管理,統(tǒng)一維護(hù),給開發(fā)人員少一些煩惱。
思路有兩種:
1.將JAR文件plugin樣子包裝,及新建Plug-in from existing jar archives 項(xiàng)目,然后選擇JAR文件,再取消Unzip the jar archives into the project 選項(xiàng),然后其它的插件依賴它就可以了。
2.新建一個(gè)不同插件項(xiàng)目,然后把第三方JAR包放入這個(gè)項(xiàng)目,然后引入到此項(xiàng)目中,在plugin.xml的runtime配置頁(yè)的Exported Packages 選Add... 再選擇要發(fā)布出去的包路徑,然后其他的插件依賴它就可以了。
官方推薦的方式是第一種,個(gè)人認(rèn)為第一種確實(shí)很好,可以非常好而且方便的維護(hù)第三方JAR包。但是我還是選擇了第二種方式,理由是,配置文件讀取的問題。
每一個(gè)插件文件都會(huì)維護(hù)一份屬于自己的配置文件,只有這樣才能做到自我獨(dú)立。但是這兩種方式都不能使其他插件項(xiàng)目的配置文件獨(dú)立維護(hù),原因就是Eclipse那討厭又強(qiáng)大的類加載機(jī)制。
使用第一種方式,配置文件必須放在你記載的進(jìn)來的JAR包的里面,這樣Eclipse類加載機(jī)才會(huì)加載并處理,除非選擇了Unzip the jar archives into the project 選項(xiàng),并把配置文件和一堆的class文件放在同一目錄下類加載機(jī)才能發(fā)現(xiàn)。我想這種方式誰(shuí)都不會(huì)喜歡,要么就是我們要?jiǎng)?chuàng)造自己的JAR包,要么工作臺(tái)遍布了各種各樣來自世界各地的class文件。
使用第二種方式,是通過運(yùn)行時(shí)將需要發(fā)布出來供別人依賴的package發(fā)布出來,而配置文件則需要放在此插件項(xiàng)目中。相對(duì)而言,這種比上一種有很大的好處,而且也不是那么難維護(hù)。
以上只是自己項(xiàng)目中的一些總結(jié),關(guān)于第三方JAR包的問題,我查了很多資料,好像逃不過這三種方式(直接在項(xiàng)目中依賴算一種),不知道各位大俠還有沒有更好的辦法,即能處理好第三方JAR包,又能保持各個(gè)插件維護(hù)自己獨(dú)立的配置文件?
有事沒事寫B(tài)log吧~
寫B(tài)log的N個(gè)理由:
1.測(cè)試鍵盤的耐久程度;
2.鍛煉一下自己的語(yǔ)言表達(dá)能力;
3.鍛煉一下自己的耐性;
4.廣交朋友;
5.發(fā)表一下自己的學(xué)習(xí)成果;
6.加深自己學(xué)習(xí)的印象;
7.記錄一下自己的思想;
8.想像一下自己也是技術(shù)牛人;
9.給后人一些指點(diǎn);
10.讓尋覓的的老板們?cè)琰c(diǎn)發(fā)現(xiàn)你;
11.少干點(diǎn)家務(wù);
12.放送一下自己;
13.加個(gè)廣告爭(zhēng)點(diǎn)小錢;
... ...
想不出來了,頭都大了~
RCP還是新興的東西,大家都是用它做做小東東,所以在網(wǎng)上討論RCP深度應(yīng)用的文章還不多。
在此作文N篇闡述一下我在項(xiàng)目中的實(shí)現(xiàn)思路,歡迎大家拍磚。
首先看一下我們的項(xiàng)目的總體架構(gòu):
這個(gè)圖誰(shuí)都會(huì)畫,就不說了,只是說明我們?cè)谟肦CP而已。
再看看Client這層是怎么組成的:
依賴關(guān)系是自上而下的~,當(dāng)然大家都需要依賴RCP-RUNNTIME本身。
jar plugin ---將第三方j(luò)ar包包裝成plugin樣子,以供其他的插件依賴,解決了RCP項(xiàng)目對(duì)第三方包依賴麻煩的問題,例子:junit插件的實(shí)現(xiàn);
DMP Platform ---DMP是我們產(chǎn)品的名字,所以,不要立即google,在這層我們抽象的定義出大量的公共的CoolBar以及MenuBar,都是尚未實(shí)現(xiàn)的,以待業(yè)務(wù)擴(kuò)充之用,最重要的是在這層中我們集中處理權(quán)限問題,后面會(huì)說到;
業(yè)務(wù)組建(plugin)---其實(shí)就是針對(duì)于DMP Platform編寫的一大堆的插件,而這些插件則是業(yè)務(wù)相對(duì)獨(dú)立,這樣就遵守了Eclipse的原則,所有東西都以插件形式提供的,也方便了我們以后對(duì)軟件的定制化開發(fā);
縱觀國(guó)內(nèi)外RCP的應(yīng)用(國(guó)內(nèi)本身就是很少),很少有RCP應(yīng)用使用Eclipse的思想進(jìn)行開發(fā)的,都是一個(gè)項(xiàng)目直接上~就一個(gè)UI層~什么都有!如果是這樣,還不如用VC,VB更簡(jiǎn)單~
Eclipse RCP最好的應(yīng)用還是Eclipse本身,Platform僅僅提供對(duì)文件的最簡(jiǎn)單的管理能力,而且定義一堆共用的Action,其他東西(JDT,ANT,JUNIT等等)都是以插件形式出現(xiàn)的~只有有了插件,才有了RCP業(yè)務(wù)動(dòng)態(tài)擴(kuò)充的動(dòng)態(tài)組合的新理念。
今天在寫RCP的基礎(chǔ)運(yùn)行插件的時(shí)候,發(fā)現(xiàn)一個(gè)非常有意思的問題:
我有兩個(gè)插件A和B,A是RCP運(yùn)行主插件,B是普通插件,A依賴于B存在并運(yùn)行。當(dāng)我把B打成JAR包,放到A下,做本地依賴的時(shí)候,那么Log4j的配置文件加載無誤,但是這樣是違反了Eclipse插件開發(fā)原則(Eclipse最小運(yùn)行單位是插件)的;我把A和B通過feature進(jìn)行關(guān)聯(lián),然后在A中依賴B插件,通過product文件啟動(dòng)A插件的時(shí)候,發(fā)現(xiàn)B插件無法加載Log4j的配置文件... ...
很郁悶的問題哦~為什么?
因?yàn)槲乙恢痹谑褂迷瓉韏ava的類加載機(jī)制思考問題,一個(gè)類加載機(jī),將加載所有的Class~在Eclipse下則不是這樣的,每一個(gè)類加載機(jī)只負(fù)責(zé)一個(gè)插件的內(nèi)容加載~多個(gè)類加載機(jī)之間是沒有關(guān)系的~
因此,每一個(gè)插件在類加載時(shí)都是獨(dú)立的個(gè)體~所以每一個(gè)插件下面都需要自行增加一個(gè)Log4j配置文件,大家都獨(dú)立維護(hù)自己的Log4j配置文件~唉,有一個(gè)配置文件泛濫的年代啊~
ps:
慶祝一下~RCP開發(fā)者的福音到了!
今天在Eclipse站上學(xué)習(xí)如何使用Maven2管理Eclipse plugin時(shí),偶然google到了~Codehaus上已經(jīng)有了maven2管理Eclipse plugin的插件了~
http://mojo.codehaus.org/pde-maven-plugin/index.html
真是踏破鐵鞋無覓處,得來全不費(fèi)工夫!
順道說說Baidu,我baidu MOJO的時(shí)候,搜索結(jié)果80%竟然是MP3類的~我都暈倒了,我以為我開的是Mp3.baodu.com,百度現(xiàn)在是不是轉(zhuǎn)行轉(zhuǎn)作MP3了?