Feeling

              三人行,必有我?guī)熝?/p>

             ::  :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks

          網(wǎng)上關(guān)于Eclipse Fragment的資料比較少,引用Eclipse Wiki的一段話:

          An Eclipse Fragment is a way of putting your own classes into the "class loader" of another package (basically, it's as though your class was actually in the other package). If you combine this ability of a Fragment with the notion of a plugin's classpath ordering, then you can force your class to load before a like-named class in the original package.

          簡而言之,F(xiàn)ragment可以利用Eclipse平臺的ClassLoader機(jī)制替換原有Plugin的某些文件,以便實(shí)現(xiàn)自己的功能。如果僅僅是因?yàn)镻lugin擴(kuò)展,而需要替換自己項(xiàng)目的某些Plugin,可以參考文章:

          http://wiki.eclipse.org/Steps_to_use_Fragments_to_patch_a_plug-in  (來之不易,感興趣的可以收藏下)

          讀完這篇文章,你大概就應(yīng)該能夠了解到Fragment的實(shí)現(xiàn)分為兩部分:Host 和 Patch。這兩部分對應(yīng)的plugin的manifest.mf文件都需要做特殊處理,對于Patch的build方式也要特殊處理,那就是build出來的plugin jar里放置的不是松散的class文件,而是一個特殊的jar文件,這個 jar 文件定義在Host plugin的manifest.mf 的classpath里面。

          通常情況下,按照這篇文章的做法是沒有問題的。但是在開發(fā)階段,有一種情況可能無法實(shí)現(xiàn)class的替換。

          我公司的項(xiàng)目是使用perforce進(jìn)行項(xiàng)目版本控制的,但是perforce比較傻,有些重要的功能沒有實(shí)現(xiàn),而又很關(guān)鍵,因此我想自己針對perforce的eclipse plugin做一個fragment,添加自己想要的功能。但是這個plugin沒有source code,而我自己的hack也是反編譯class文件進(jìn)行的。所以在我的work space里,并沒有Host plugin的 project。結(jié)果按照這篇文章的做法,始終不能在workbench debug的狀態(tài)下,正確load我hack過的class。因?yàn)樵诖a模式下面是可以正確load的,而現(xiàn)在沒有代碼,在數(shù)次檢驗(yàn)無果之后,只能針對ClassLoader去思考了。Host文件里要求一個jar文件,我就用PDE 將 fragment export出來,把Fragment plugin jar 包里包含的那個 jar 文件解壓出來,放到 patch project 里,然后重新Debug, OK,這次果然沒問題了。一個小小的Class Loader問題,真的能夠要人命呀……這應(yīng)當(dāng)算是Eclipse的一個bug吧,除非是對一個Plugin進(jìn)行hack,否則一般也不會碰到這種情況。普通的項(xiàng)目開發(fā),肯定會包含Host Plugin的Project。

          我的經(jīng)歷權(quán)且當(dāng)做飯后談資,不足為慮。我這兒想說的是Fragment機(jī)制非常好用,也易于Plugin擴(kuò)展。比如你的項(xiàng)目分為Open Source 和 Commercial 2種的話, Commercial 部分也可以通過Fragment來實(shí)現(xiàn),不一定需要走Extension Point路線。由于網(wǎng)上相關(guān)文章不多,還需要自己多多研究,了解其機(jī)制。


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          GitHub |  開源中國社區(qū) |  maven倉庫 |  文件格式轉(zhuǎn)換 
          主站蜘蛛池模板: 玉田县| 汝州市| 西丰县| 四子王旗| 潜江市| 资中县| 黄大仙区| 汪清县| 犍为县| 改则县| 凉城县| 上思县| 宜兰县| 本溪| 青铜峡市| 伊宁县| 灌南县| 平潭县| 利津县| 五大连池市| 青阳县| 勃利县| 皮山县| 安陆市| 长春市| 阿合奇县| 叶城县| 贵溪市| 兴海县| 美姑县| 锦州市| 来宾市| 龙江县| 阳谷县| 特克斯县| 阿拉善左旗| 海口市| 陕西省| 清涧县| 察雅县| 雅安市|