<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    OSGi Maven開發(fā)/部署環(huán)境的搭建歷程

    之前的Opendoc中沒有涉及過此部分的內(nèi)容,maven又是現(xiàn)在非常流行的java的工具,再加上到目前為止搭建OSGi Maven開發(fā)和部署的環(huán)境還是比較的麻煩,覺得有必要寫篇這樣的blog,:),在這篇blog中來看下如何搭建一個比較好用的OSGi Maven開發(fā)和部署環(huán)境,看看我在搭建一個這樣的環(huán)境中的痛苦歷程。

    首先說下我期望的OSGi Maven開發(fā)/部署的環(huán)境:
    1、META-INF中的manifest.mf文件可以自己控制;
          Eclipse對插件工程的開發(fā)支持的很好了,在IDE中可以很方便的去修改這個manifest.mf,所以還是自己控制更爽,當(dāng)然,打包的時候需要打入自己控制的這個manifest.mf。
    2、在mvn eclipse:eclipse生成的.classpath中,能夠不把所依賴的bundle的jar包放進(jìn)去;
          因為在OSGi環(huán)境中,已經(jīng)不再通過直接在project的classpath中依賴其他bundle的jar了來調(diào)用其他bundle中的package,而是通過在manifest.mf中增加import-package這樣的方式,所以不能再把依賴的bundle的jar打到classpath里了,否則會很奇怪,當(dāng)然,這也源于eclipse有個很好的插件開發(fā)環(huán)境,讓你可以在不依賴bundle jar的情況下直接寫依賴其他bundle的package的代碼。
    3、在mvn clean package的時候能夠把需要依賴的jar打到bundle jar中,并和META-INF/Manifest.mf文件中的Bundle-Classpath是匹配的;
          在某些bundle中可能會依賴一些jar,在META-INF中通常會去指定依賴的這些jar,放入bundle-classpath中,因此要求在打包的時候能夠把這些依賴的jar打入相應(yīng)的路徑下。

    說完想法后,首先想到的是在OSGi界中支持maven環(huán)境的大名鼎鼎的maven-bundle-plugin(http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html),maven-bundle-plugin基于Peter寫的bnd實現(xiàn),不說廢話了,按照自己期望的環(huán)境來使用maven-bundle-plugin進(jìn)行搭建:

    步驟一
    按照上面頁面的指導(dǎo),在pom.xml中增加maven-bundle-plugin先,接著按照自己的想法,要自己控制manifest.mf,于是在plugin的configuration中增加:
    <_include>META-INF/MANIFEST.MF</_include>
    滿心歡喜的等待著完美的結(jié)果,可惜....不如人意呀,打包出來的jar里面的MANIFEST.MF已經(jīng)物是人非了,完全不是自己控制的那個,插件給你自動的加上了一堆的import-package、private-package、export-package,我知道這個插件是基于bnd來寫的,但沒想到竟然連自己控制的權(quán)力都不給我了,完全仍然是通過bnd來計算出import-package、private-package什么的;

    步驟二
    好,在傷心過后接著仔細(xì)看,還好,在plugin的configuration中可以自己指定export-package、private-package這些,于是繼續(xù)欣喜的使用,這兩個倒是控制住了,但....import-package自己是不能控制的,這個是不行的,這樣就導(dǎo)致了必須同時自己維護(hù)pom.xml以及project中的META-INF/MANIFEST.MF,讓它們保持一致,否則可能導(dǎo)致打出來的包和你在project中運行的表現(xiàn)不一致,并且bnd計算出來的import-package并不是我想要的,有點太復(fù)雜了,還是自己控制比較好;

    步驟三
    傷心到極點了,其實到目前為止,已經(jīng)可以確定maven-bundle-plugin,也是OSGi maven中唯一的插件,不能滿足我的需求,不過還是繼續(xù)看看這個插件其他方面的表現(xiàn),驚喜的發(fā)現(xiàn)有一點倒是做的不錯的,它支持一個<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>,有了這個標(biāo)簽后,它可以直接把依賴的jar打入bundle jar包中,并且相應(yīng)的自動在bundle-classpath中加上了,這點倒是不錯的,看起來與我期望的環(huán)境的第3點是比較匹配的,可惜了。
    還有就是,很當(dāng)然的,它沒法做到控制mvn eclipse:eclipse時生成的.classpath不包含bundle jar的引用。

    按照上面的三個步驟,總結(jié)下,有些時候智能是好事,但maven-bundle-plugin就是過于智能了,為什么不給點權(quán)力給使用者呢,因此這個插件要提升到完全可用的情況的話,還需要提供下讓使用者自己控制MANIFEST.MF的權(quán)力,相信這點要做到并不困難,而且做到這點后基本也就可以使用了。

    繼續(xù)尋找,于是靜心分析了下自己的需求,貌似可以自己通過maven現(xiàn)有的幾個插件來達(dá)成自己的愿望,于是開始了組合拳:
    1、MANIFEST.MF文件自己控制
         不就是要自己控制這個文件嘛,OK,干脆,就只用maven-jar-plugin,這個插件允許指定所使用的MANIFEST.MF文件,于是,嘗試著在這個plugin的configuration中增加:
         <archive>
             <manifestFile>META-INF/MANIFEST.MF</manifestFile>
         </archive>
         恩,很順利,開門紅呀,打出來的jar包中的MANIFEST.MF文件就是自己的那個。
    2、mvn eclipse:eclipse生成的.classpath中要去掉bundle jar的依賴
          對于我這么一個對maven不是那么熟悉的人來講,這個有點復(fù)雜,于是不斷的google,甚至是翻看了maven-eclipse-plugin的源碼...
          最終終于功夫不負(fù)有心人,找到一個簡單的辦法:
          首先將工程方式指定為pde,也就是eclipse插件工程,在maven-eclipse-plugin的configuration配置中增加<pde>true</pde>;
          然后在pom.xml中將不希望生成到.classpath中依賴的scope指定為provided;
          心驚膽戰(zhàn)的開始運行mvn eclipse:eclipse,OH YEAH!,成功!
          ps: 另外也可以通過在maven-eclipse-plugin的configuration中增加exclude配置,來將某些依賴從.classpath中去掉,當(dāng)然,這方法沒有上面的易用。
    3、在mvn clean package的時候能夠把需要依賴的jar打到bundle jar中,并和META-INF/Manifest.mf文件中的Bundle-Classpath是匹配的;
          恩,這點,印象中貌似maven是有支持的,于是繼續(xù)開始找,終于找到了maven-dependency-plugin(之前還找到了一個maven-shade-plugin,也很帥,不過不滿足需求),通過這個插件可以把需要的依賴的jar都復(fù)制到某個指定的目錄中去,但記得把這個指定的目錄加入到maven-jar-plugin的resources目錄里面去,否則這些jar文件是不會出現(xiàn)在你的bundle jar里的。

    OK,通過上面這套組合拳,終于達(dá)成了目的,看來有必要找個時間寫個好用點的maven的OSGi插件,否則真的忒折騰了,上面這個方法仍然有幾個痛苦的地方:
    1、如果你的bundle中需要export其中依賴的lib的package的話;
         mvn eclipse:eclipse之后你會發(fā)現(xiàn)其他bundle即使import了這個package,也會調(diào)用不到,這里的原因在于生成的.classpath中所依賴的那個lib的exported屬性沒有設(shè)置為true,google了maven eclipse插件,貌似這是它的一個缺失的功能,因此在目前只能是mvn eclipse:eclipse后,再到build path里把這些lib exported出去。
    2、還是得在插件的pom.xml中配置所依賴的其他的bundle;
         這是為了讓你在mvn clean package的時候能通過,這點還是挺郁悶的,如果能自己去找到的話就好了(Felix構(gòu)建bundle repo是有潛質(zhì)做到這點的),:),這樣導(dǎo)致了在每次在import package后,還得記得去修改了pom,否則的話在eclipse compile什么都正常,到了maven里就掛了。
    因此,如果能解決上面兩點的話,那將更加完美。

    posted on 2009-03-05 12:14 BlueDavy 閱讀(16069) 評論(12)  編輯  收藏 所屬分類: OSGi、SOA、SCA

    評論

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程 2009-03-05 17:58 papayakov

    下載最新的maven 2.0.10
    mvn archetype:generate
    然后選24,就可以了。
    不過貌似好多dependency下載不成功,repository里面沒有,需要手工調(diào)整一下pom.  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程 2009-03-05 22:12 lagrustler

    在eclipse下,利用maven做pde開發(fā)太費勁了  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程 2009-03-10 20:29 wuzhongxing

    請教一下,在linux平臺下,i如果把osg控制臺放到后臺執(zhí)行之后,還能操作bundle嗎,比如停止bundle、裝載新的bundle?

    我的msn:wu_zhongxing@hotmail.com,謝謝了  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程[未登錄] 2009-03-14 13:34 guitarpoet

    對你前兩條的要求不是很理解。

    1、為什么要自己控制POM和MANIFEST兩個文件呢?為什么不把所有的配置信息都放到POM里面,從而生成MANIFEST而要違背DRY法則呢?

    2、我覺得把OSGi工程當(dāng)作普通java工程來開發(fā)也不是什么不可以的事情。

    一般說來,我覺得使用maven來開發(fā)OSGi程序還是很方便的。

    Felix的Bundle插件可以自動計算出你需要import的包。這一點有的時候確實有點兒煩人(比如說,我要在我的bundle里面embed一個hibernate的jar,hibernate所有依賴的東西——JTA、DBDrivers、....所有的支持全都加到import配置中去了,實際上我只是想要hibernate中的幾個類而已),而且我沒有看到什么辦法可以解決,我的方式是對jar做自定制,排除掉所有不用的包。  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程 2009-03-14 15:05 BlueDavy

    @guitarpoet
    我想對于第一點,我在blog里有寫到過,因為在eclipse里開發(fā)直接采用修改MANIFEST.MF的方式會更好用,因此我不希望在pom中維護(hù)MANIFEST.MF信息。
      回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程 2009-08-04 15:45 SQ

    已經(jīng)可以確定maven-bundle-plugin,也是OSGi maven中唯一的插件.
    ps: 這里有一個:SpringSource Bundlor http://www.springsource.org/bundlor  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程 2010-02-08 10:04 spirit14

    bluedavy你好,在了解過利用 Servlet Bridge 將 OSGI 嵌入 WEB容器的方式后,我產(chǎn)生了一個疑問:
    在看到的例子中,被作為插件導(dǎo)入 bridge.war 的 WEB應(yīng)用(已經(jīng)被轉(zhuǎn)換成 jar)其本身就是一個 BUNDLE 。

    但在現(xiàn)實中很多企業(yè)需要將原有的 WEB應(yīng)用向模塊化轉(zhuǎn)換,而不是新建設(shè)一個模塊化的應(yīng)用,即保護(hù)原有的 IT投資。 那么一個以 SPRING ,HIBERNATE, STRUST 作為應(yīng)用框架的 普通 WEB應(yīng)用能不能打包成 JAR 直接丟到 bridge.jar 里呢? 還是說要經(jīng)過什么配置或轉(zhuǎn)換呢? 謝謝。   回復(fù)  更多評論   

    # wsdl+bpel+ode!!! 2010-12-17 18:05 小朱

    我想利用 felix 實現(xiàn)的osgi 最后生成bundle的wsdl文件 ,加上bpel文件(也就是工作流) 通過ode 生成cbp文件, 希望大家提供思路  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程[未登錄] 2015-05-19 09:37 John

    http://osgi.jxtech.net 是一個根據(jù)標(biāo)準(zhǔn)OSGi的開發(fā)平臺,有在線演示和免費插件下載。  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程[未登錄] 2015-06-04 08:34 Tom

    @John
    嗯,這個平臺相當(dāng)優(yōu)秀,正是我們要找的平臺,能將OSGi用得如此熟練的公司真不多。  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程 2015-06-29 19:54 Wick

    @John
    對這個平臺,贊一個,也給你一個贊。  回復(fù)  更多評論   

    # re: OSGi Maven開發(fā)/部署環(huán)境的搭建歷程[未登錄] 2015-09-23 10:27 Gavin

    @guitarpoet
    有些技術(shù)問題,真心請教!還請麻煩,我的qq: 729801332

    萬分感謝!?。。?!  回復(fù)  更多評論   

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導(dǎo)航

    <2015年6月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    統(tǒng)計

    隨筆分類

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲视频中文字幕| 色多多免费视频观看区一区| 免费无码肉片在线观看| 无码天堂亚洲国产AV| 亚洲精品无码MV在线观看 | 成人爽a毛片免费| 亚洲不卡1卡2卡三卡2021麻豆| 男人的天堂亚洲一区二区三区 | 全黄a免费一级毛片人人爱| 中文字幕在线观看免费| 涩涩色中文综合亚洲| 亚洲国产精品福利片在线观看| 99精品国产免费久久久久久下载| 国产精品亚洲片在线花蝴蝶| 精品日韩亚洲AV无码| 亚洲区不卡顿区在线观看| 国产成人精品久久免费动漫| 一区二区在线视频免费观看| 亚洲人成免费网站| 亚洲色精品vr一区二区三区| 久久精品a一国产成人免费网站| 三级网站在线免费观看| 亚洲av无码专区在线观看下载| 亚洲成人在线电影| 久久久久久亚洲精品不卡| 最新69国产成人精品免费视频动漫| 免费无码又爽又刺激一高潮| 偷自拍亚洲视频在线观看| 国产v亚洲v天堂a无| 亚洲国产精品va在线播放| 日本中文一区二区三区亚洲 | 夜夜春亚洲嫩草影院| 免费无码看av的网站| 4虎永免费最新永久免费地址| 成人无码精品1区2区3区免费看| 大桥未久亚洲无av码在线 | 亚洲AV成人无码久久WWW| 亚洲一区二区三区无码国产| 亚洲国产精品第一区二区| 国产亚洲成归v人片在线观看| 国产免费av片在线无码免费看|