BndTools為在Eclipse中進行OSGi開發提供支持

openkk 12年前發布 | 14K 次閱讀 Eclipse

Neil Bartlett 最近發布了 BndTools 1.0.0,它是為 Eclipse 所用的 OSGi 開發環境。這個工具通過其 github 代碼庫提供了源代碼,你也可以從 Eclipse Marketplace 直接把它安裝到 Eclipse 運行時中。

BndTools 為我們提供了一種使用 Eclipse 開發 OSGi bundles 的方式。它沒有通過直接編輯Manifest.MF的方式定義依賴關系,而是使用 Bnd 文件基于 Bnd 工具驅動工具鏈(toolchain)。它還提供了介紹性的教程。此外,BndTools 還具有自動化語義版本控制功能(automated semantic versioning),它會將已構建的組件和之前發布的組件相比較,讓算法來決定是否對大、中、小三種版本號進行升級,而不是讓用戶人為決定。

InfoQ 抓住了和 Neil Bartlett 會面的機會,詢問他為何要創建 BndTools:

Neil Bartlett:我曾經做過很多 OSGi 的培訓,發現 OSGi 開發工具總是存在一個問題,那就是過于笨重,初學者很難理解和使用。由于我具備一些開發 Eclipse plug-in 的經驗,所以就開始構建一些小工具,讓我和學生們的工作更輕松。隨著時間的推移,這些工具成為比較完整的、集成的 OSGi 開發環境。

現在我會使用 BndTools 來完成所有的 OSGi 開發,并且,由于 Eclipse plug-in 本身也基于 OSGi,所以我甚至使用 BndTools 來完成它自身的開發。

InfoQ:它與 Bnd 有什么關系呢?

Neil Bartlett:對于構建和分析 OSGi bundle 來說,Bnd 是一種極為強大的底層工具。它是由 Peter Kriens (OSGi 聯盟的技術總監)開發的,OSGi 聯盟使用它來構建自己的 API 套件、兼容性測試以及引用實現的 bundle。作為一種底層工具,它很容易繼承,并且可以直接從命令行調用,可以被 ANT 任務所使用,也可以嵌入到 Maven 和 IDE 中。

BndTools 使用 bnd 作為它的“引擎”。所有主要功能都是 bnd 本身提供的,而 BndTools 只是描述什么時候應該調用 bnd,并以更好的形式來展現結果。由于很多其它工具也集成了 bnd,所以 bnd 所使用的描述文件幾乎已經成為一種事實上的標準,這意味著 BndTools 開發者很容易與使用其它工具的開發者協作,也可以在選擇其它工具的時候很容易地完成遷移。

InfoQ:BndTools 與 Eclipse 的 PDE 相比怎么樣?

Neil Bartlett:Eclipse PDE 是另一種基于 Eclipse 的 OSGi 開發環境。BndTools 沒有以任何方式重用 PDE,但是 BndTools 和 PDE 都是基于 Eclipse 的 Java 開發工具集(JDT)構建的。

PDE 所遵循的開發哲學和 bnd 以及 BndTools 不同,它被稱之為“manifest 優先(manifest first)”。在 PDE 中, 你需要直接編輯 MANIFEST.MF 文件,它會直接集成到 bundle 中,而不需要任何后續處理。我們的開發哲學是,MANIFEST.MF 應該當作編譯器輸出來對待:也就是說,應該使用更簡單的源代碼來生成這個文件。這非常重要,因為完整的 MANIFEST.MF 文件中會包含很多重復的信息,或者應該直接從 Java 代碼中繼承的信息,比方說包一級的依賴關系列表。手動編輯這樣的信息是個苦力活,而且容易出錯。

InfoQ:在 JRebel 和基本的 Java 項目之上使用 OSGi 有何優勢?

Neil Bartlett:JRebel 是一種很強大的工具,它可以讓我們在開發過程中更快地重新部署代碼,但是不管是在運行時還是在構建時,它都沒有提供任何一種模塊系統(module system)。OSGi 通過封裝和受約束的、明確的依賴關系強制指定了模塊邊界。OSGi 的目的就是要幫你改善應用程序的架構,創建出可重用的組件,而 JRebel 是要盡可能快地把你的代碼從 IDE 中提取出來,然后部署到 Java EE 應用程序服務器中。

同時,OSGi 還具有模塊動態熱交換(dynamic hot-swapping)的特性,該特性已經足夠有效,所以我認為開發 OSGi 程序的時候 JRebel 并不是特別有用。BndTools 對此也有幫助:當你保存了 Java 源文件的時候,代碼就會重新編譯、打包到 bundle 中,并且推送到正在運行的應用程序中。

InfoQ:BndTools 能夠與其他構建環境——像 Maven 和 Ant/Ivy——集成嗎?

Neil Bartlett:BndTools 的“本地”構建系統是 bnd 本身,它支持 Apache Ant 同時構建多個項目,這也是 OSGi 聯盟構建他們的 1300 多個 bundle 的方式。Bnd 擁有插件化的庫系統(pluggable repository system),這讓我們可以使用任何一種后端的庫技術,包括 Ivy。

對于 Maven 用戶來說,最流行的 OSGi 開發方式就是使用 Maven Bundle Plugin,它是另一種集成了 bnd 的工具。BndTools 通過這個插件以及 M2Eclipse 與 Maven 集成。在這種情況下,M2Eclipse 會負責管理構建依賴關系(顯然是在 POM 中),并負責實際上構建 bundle 的工作,而 BndTools 會提供編輯和分析 bundle 描述符以及依賴關系的方式,還提供了設置和執行運行配置(run configurations)的方式,這就是它的價值所在。

InfoQ:想要開始使用 BndTools,有沒有教程可供使用?

Neil Bartlett:有的,你可以在 http://bndtools.org/doc/tutorials/找到。

InfoQ:你能使用 BndTools 編寫 Java 源代碼,而不需要在編碼的時候依賴 OSGi 嗎?

Neil Bartlett:可以,BndTools 希望你可以使用 OSGi 聲明式服務以 POJO 樣式編寫組件,而不依賴于 OSGi。這樣,這些組件就可以在 OSGi 之外進行單元測試,并在非 OSGi 的生產環境——像 Sprint 或 JavaEE——中使用。

你甚至還會發現 BndTools 具有配置模塊和分析依賴關系的功能,即便你還沒有做好部署到 OSGi 中的準備,它們對于提高代碼的模塊性很有幫助。例如,我們可以使用 PojoSR 提供類似于 OSGi 的服務注冊,它會支持 OSGi 的大多數特性,只是不支持在 OSGi 中必須要使用的模塊邊界。這樣它可以幫助你將遺留應用程序遷移到 OSGi,并且在 BndTools 中開發,這樣你就能夠看到應用程序還差多少才能夠完全運行在完整的 OSGi 上。

InfoQ:Bnd 可能會支持其它 IDE 嗎,像 IntelliJ 和 NetBeans。

Neil Bartlett:BndTools 本身與 Eclipse 聯系非常緊密,不會支持其它 IDE。然而,其他 IDE 也開始整合 bnd,讓它們更易于互操作。例如,IntelliJ 就有 Osmorc 項目,它會使用 bnd,并且在多種方式上與 BndTools 的開發哲學類似。我已經與 Osmorc 的首席開發者合作,讓開發者能夠更輕松地使用各種 IDE 來協同工作。

在我上次詢問的時候,NetBeans 項目還沒有計劃直接支持 OSGi 的開發。但是,NetBeans 非常專注于 Maven,使用 NetBeans 的 OSGi 開發者通常會使用 Maven Bundle Plugin,之前我們也曾提到,它也是 BndTools 最初集成 Maven 的方式。

你可以使用 Eclipse Marketplace 來安裝 BndTools。

查看英文原文:BndTools provides OSGi Development in Eclipse

      來自: InfoQ

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!