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

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

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

    無為

    無為則可為,無為則至深!

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    你為什么需要Bnd?

    作者:皮特*柯林斯
    翻譯:草兒

    剛剛收到一個谷歌文章提示,來自一個關于OSGi的博客。作者是Jilles van Gurp,首先對OSGi表示贊美然后提到這個工具。他的主要問題是必須在Eclipse插件開發環境里一個一個在Manifest中增加輸入 ,這時一些人會抱怨manifest的格式繁雜。我非常同意他的觀點。 Bnd這個工具基本上考慮到他所有的要求。


    管理對其他綁定的依賴比在Java中處理輸入包更繁瑣。一般當我想用某些庫的的時候,就下載它;把它放在系統環境類路徑上;輸入幾個字符,使用ctrl+space暴露任何API。在OSGi中,這個更困難。你下載這個bundle(假設存在一個)然后需要決定你想用它暴露給的哪一個包 。

    我同意Eclipse的Java開發平臺(JDT)要比插件開發環境(PDE)工作起來更方便。然而,如果你用bnd,你就會精確地按照你所描述的方式工作。你能夠象你以前一樣使用庫包,你沒有必要用PDE。我僅僅用JDT工作。Bnd讀取一個配置文檔,該文檔描述類路徑應該放在結果bundle中的那一部分。 通配符和默認設置使這個配置描述最小化成為可能。Bnd到那時會核算目錄和所要求的輸出。

    大多數庫包實際上不用bundle封裝。Bundles是一個新概念,它同舊有的jar文件(大多以第三方庫的形式引入)不兼容。這不是一個不可逾越的限制。一個更合理的默認策略是把非OSGi jar文件作為bundles,簡單地輸出它的所有東西和把所有它要引進的放到引進路徑上。從一個jar文件中抽取信息不可能很難。至少,我想有一個工具為我做這種工作。

    好了,使用Bnd工具 你的祈禱再次生效了。這個工具有一個wrap函數能夠為你做這個工作。然而,實際上因為很多JAR文件的依賴極端繁雜,所以這個可能變得困難。通常創建一個可選輸入或者忽略輸入從而bundles是可安裝的是必要的。當你分析一個JAR文件時(Bnd能夠幫你處理這個工作),你總會吃驚的看到很多無用的依賴出現。


    最后,我討厭必須處理繁雜的manifest文件的想法。我注意到要求manifest文件要以空行作為結束的缺陷依舊存在(如果這個遺漏了怪異的事情就發生了)。這個和在makefiles文件要用tab代替空格一樣煩人。

    啊哈哈,確實很麻煩,但是你使用Bnd后就不會在為這些小事而煩躁了。一個.bnd文件是一個屬性文件。它能處理不限長度的行,使用反斜杠\擴展到下一行,沒人會關心最后一行。你也能增加注釋。Bnd讀取這些屬性文件,它用在Manifest類中建立的Java生成一個有效的manifest。以這種方式校驗所有的頭都為正確的值。.bnd文件看起來是多么簡單:

      Export-Package: aQute.service.*
    Import-Package: javax.servlet.http;version="[2,3)", *

    但是,Jilles還沒有說完關于OSGi的批評:


    當然伴隨Java5.0來臨,使用元注釋完成這個是一個更好的方式。可以理解的是,OSGi需要與舊版本保持向后兼容,但是發展方式顯然同新版本Java機制相背離。基本上,我想我基于import & export機制能夠指定類和方法層次的約束。

    我知道元注釋最近變得流行,清晰地它們有它們的用處。然而,這也有關注點分離方面的考慮。我認為我們的行業已經明白人們不想把業務邏輯同基礎架構混淆在一起的這種考慮。使用元注釋在類或者方法層次指定你的約束顯而易見會弄亂你的代碼。我認為依賴總是復雜到超過人類能夠管理的程度。需要更好的工具,讓用戶在代碼中手工管理這些依賴是極端錯誤的傾向。所以我不能肯定元注釋是一個解決方案。如果輸入包在源文件里有版本信息的話(或者在manifest或者在包目錄中的包信息文件里),Bnd能夠找到輸入包的版本信息 。盡管它不能處理版本范圍,但是這種方式至少是簡單并能保持一致性。關于怎樣處理版本范圍(允許在類路徑上存在同包的多版本并分析他們的不同點),我有一些想法。但是,需要時間--
    另一個問題是包中沒有真正包含Java中首類表示形式。它們在Classes文件中按名調用(在包聲明中),但是并沒有它們自己的規范。這意味著增加包層次的元注釋是困難的(你能夠使用package-info.java 文件完成它)。

    就像前面我訴說的,我還不能肯定元注釋是不是最好的方案,因為它會把業務邏輯同基礎架構相混淆。在OSGi中,你能用manifest文件(或者.bnd文件)在包中增加屬性。
    另外, Bnd還有更多的特性:

    • Bnd也被以Felix Maven-bundle 插件形式用在Maven構建工具中,。
    • Bnd 也是一個eclipse插件, 它在為.bnd 文件 和 .jar 文件的上下文菜單里增加了入口。
    • 你能添加來自系統文件的任何地方或者來自一個URL的資源。這并不需要先創建所有資源的目錄結構, JAR在運行中構建。
    • 資源能夠包含被代替的變量引用。
    • 你能夠很容易得在你的JAR文件中從類路徑上添加包。如果你用另一個bundle的一小部分而不想創建額外的依賴,這個用起來非常方便。
    • Bnd也能在輸出中創建uses語句 。這uses語句表明使用什么包。整個架構使用這些信息創建一致的類空間。
    • 你能內聯其他的JAR文件或者目錄。
    • 更多的功能.

    我沒有說Bnd是完美無缺的。我希望我能花一些時間以我喜歡的方式對它進行擴展:處理依賴的圖形編輯器;更好的分析支持;集成Eclipse構建器等等。


    Peter Kriens



    凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
    、轉載請注明來處和原文作者。非常感謝。

    posted on 2007-09-05 11:03 草兒 閱讀(915) 評論(0)  編輯  收藏 所屬分類: 關注OSGi
    主站蜘蛛池模板: 亚洲夂夂婷婷色拍WW47| 色噜噜综合亚洲av中文无码| 国产成人精品亚洲2020| 一区二区三区四区免费视频| 亚洲午夜成人精品电影在线观看| jzzijzzij在线观看亚洲熟妇| 啦啦啦www免费视频| 亚洲另类自拍丝袜第五页 | 无人在线观看完整免费版视频| 久久夜色精品国产噜噜噜亚洲AV| 人妻无码一区二区三区免费 | a在线观看免费视频| 亚洲中文字幕无码久久精品1| xxxxx做受大片在线观看免费| 亚洲国产午夜中文字幕精品黄网站 | 精品人妻系列无码人妻免费视频| 久久夜色精品国产亚洲av| 一级做性色a爰片久久毛片免费| 国产亚洲美日韩AV中文字幕无码成人 | 国产精品九九久久免费视频| 怡红院亚洲怡红院首页| 国产亚洲免费的视频看| 亚洲精品视频专区| 91在线视频免费播放| 久久久久亚洲AV无码去区首| 亚洲男人天堂2020| 久久这里只精品国产免费10| 亚洲欧洲国产综合| 思思99re66在线精品免费观看| 欧洲亚洲综合一区二区三区| 亚洲精品国产精品乱码视色| 8x8x华人永久免费视频| 亚洲欧洲精品成人久久曰| 亚洲午夜精品第一区二区8050| 国产成人精品一区二区三区免费| 亚洲小说图片视频| 亚洲男人天堂2020| 最近高清中文字幕无吗免费看| 国产亚洲欧美日韩亚洲中文色| 亚洲乳大丰满中文字幕| 丁香花免费高清视频完整版|