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

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

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

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

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

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

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

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

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

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

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

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

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

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

    評(píng)論

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

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

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

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

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

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

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

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

    對(duì)你前兩條的要求不是很理解。

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

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

    一般說(shuō)來(lái),我覺(jué)得使用maven來(lái)開(kāi)發(fā)OSGi程序還是很方便的。

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

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

    @guitarpoet
    我想對(duì)于第一點(diǎn),我在blog里有寫(xiě)到過(guò),因?yàn)樵趀clipse里開(kāi)發(fā)直接采用修改MANIFEST.MF的方式會(huì)更好用,因此我不希望在pom中維護(hù)MANIFEST.MF信息。
      回復(fù)  更多評(píng)論   

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

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

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

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

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

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

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

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

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

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

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

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

    @John
    對(duì)這個(gè)平臺(tái),贊一個(gè),也給你一個(gè)贊。  回復(fù)  更多評(píng)論   

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

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

    萬(wàn)分感謝!!!!!  回復(fù)  更多評(píng)論   

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導(dǎo)航

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

    統(tǒng)計(jì)

    隨筆分類(lèi)

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲午夜久久久久久久久电影网| 99亚洲乱人伦aⅴ精品| 亚洲国产精品成人网址天堂| **aaaaa毛片免费| 国产精品成人啪精品视频免费| 亚洲精品日韩一区二区小说| 亚洲第一区视频在线观看| 久久亚洲AV无码西西人体| 国产精品免费综合一区视频| 99在线精品视频观看免费| 成全高清在线观看免费| 九九全国免费视频| 亚洲av无码av在线播放| 国内精品久久久久影院亚洲| 亚洲经典在线观看| 亚洲一区二区三区四区在线观看| 亚洲一级黄色视频| 亚洲精品久久久www | 亚洲国产精品无码av| 亚洲 另类 无码 在线| 在线观看永久免费视频网站| 成人超污免费网站在线看| 亚洲性线免费观看视频成熟| 最近新韩国日本免费观看| 午夜网站在线观看免费完整高清观看 | 久久99亚洲网美利坚合众国| 婷婷亚洲综合五月天小说| 亚洲AV无码一区二区三区DV| 亚洲日产韩国一二三四区| 亚洲热妇无码AV在线播放| 亚洲精品无码不卡在线播HE| 亚洲综合伊人久久综合| 亚洲一区二区三区影院| 亚洲愉拍99热成人精品热久久| 亚洲成片观看四虎永久| 亚洲区不卡顿区在线观看| 亚洲日韩人妻第一页| 亚洲综合日韩久久成人AV| 亚洲区小说区图片区QVOD| 亚洲av无码国产精品色午夜字幕| 亚洲av无码一区二区乱子伦as |