可以在任何一個告訴我是什麼VS進口裝箱率VS嵌入依賴性OSGi的Maven依賴VS進口裝箱率VS嵌入依賴性
依賴之間的差異
我真的失去了看樣品osgi包的pom文件。
如果默認maven <import-package>*</import-package>
語句解決了對其他包的依賴性。
爲什麼需要使用<dependency>
元素包含該包?
編輯:我沒有任何樣品放在這裏。 問題是「如何將一個bundle作爲一個依賴項來訪問它的包 - >不同包中的服務?」
可以在任何一個告訴我是什麼VS進口裝箱率VS嵌入依賴性OSGi的Maven依賴VS進口裝箱率VS嵌入依賴性
依賴之間的差異
我真的失去了看樣品osgi包的pom文件。
如果默認maven <import-package>*</import-package>
語句解決了對其他包的依賴性。
爲什麼需要使用<dependency>
元素包含該包?
編輯:我沒有任何樣品放在這裏。 問題是「如何將一個bundle作爲一個依賴項來訪問它的包 - >不同包中的服務?」
Maven提供了廣泛的依賴模型。一個項目有一個pom,那個pom指定了它對其他poms的依賴關係。這是傳遞性的,所以有一個依賴可以下載一半的互聯網。在maven中,您可以指定您需要依賴於您的編譯類路徑或運行時類路徑。
在OSGi中,您應該創建一個可以在不同環境中使用的包。出於這個原因,一個bundle是一個JAR,它使得它的依賴性是明確的。就像Maven一樣,你可以讓一個bundle依賴另一個bundle(Require-Bundle)。但是,需要另一個捆綁包變得相當脆弱。
因此OSGi的具有基於能力本地依賴模型。包出口是一種能力。在OSGi中,捆綁包A不依賴於捆綁包B,但它取決於包 b。 (包應該代表一個合約/ API。)任何導出包b的包都會滿足包A.這個模型有很多優點,它的最大優點是它不是傳遞的。這爲部署時間提供了巨大的靈活性。
在OSGi中,一個關鍵目標是最小化依賴關係,並且只依賴於定義良好的API,從不實現,因此該包在許多不同的上下文中很容易使用。
那麼你如何在maven中構造它?
一般來說,你讓bnd分析你的代碼。然後,它會創建一個清單,用於精確地表達您的軟件包依賴於哪些軟件包。
但是,開源代碼中很多代碼的構造方式很可能並不僅僅依賴於API。那麼你如何處理這些實現依賴關係?
使用嵌入依賴項選項,您可以拖入maven pom中的所有傳遞依賴項(並且可以是很多),但我不會使用它。它很快但也很髒,因爲你不知道你拖入什麼。
一般來說,我會仔細設計包裹。 bnd因此可以指定包含來自構建路徑上其他工件的哪些包。甚至有一種讓BND計算是從特定的命名空間需要什麼:
Conditional-Package: aQute.lib.*
這種情況很少完美的作品第一次,你會發現你會錯過的東西,你跑那麼這將需要一些反覆的第一次。但是,至少你知道你的包裏面有什麼。
我不明白。你能更具體一點嗎?也許用一個樣本pom和你不明白的地方。 –