你為什么需要Bnd?
作者:皮特*柯林斯
翻譯:草兒
剛剛收到一個谷歌文章提示,來自一個關于OSGi的博客。作者是Jilles van Gurp,首先對OSGi表示贊美然后提到這個工具。他的主要問題是必須在Eclipse插件開發環境里一個一個在Manifest中增加輸入 ,這時一些人會抱怨manifest的格式繁雜。我非常同意他的觀點。 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的批評:
- Bnd也被以Felix Maven-bundle 插件形式用在Maven構建工具中,。
- Bnd 也是一個eclipse插件, 它在為.bnd 文件 和 .jar 文件的上下文菜單里增加了入口。
- 你能添加來自系統文件的任何地方或者來自一個URL的資源。這并不需要先創建所有資源的目錄結構, JAR在運行中構建。
- 資源能夠包含被代替的變量引用。
- 你能夠很容易得在你的JAR文件中從類路徑上添加包。如果你用另一個bundle的一小部分而不想創建額外的依賴,這個用起來非常方便。
- Bnd也能在輸出中創建uses語句 。這uses語句表明使用什么包。整個架構使用這些信息創建一致的類空間。
- 你能內聯其他的JAR文件或者目錄。
- 更多的功能.
我沒有說Bnd是完美無缺的。我希望我能花一些時間以我喜歡的方式對它進行擴展:處理依賴的圖形編輯器;更好的分析支持;集成Eclipse構建器等等。
凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
、轉載請注明來處和原文作者。非常感謝。