爲什麼我想讓我的項目成爲一個OSGI包而不僅僅是一個標準的JAR包?它是否僅適用於使用OSGI框架的應用程序(例如:Equinox/Eclipse)?或者從開發的角度來看,它也是有用的,即:在Eclipse開發期間能夠通過其他項目輕鬆地重用我的OSGI包?爲什麼讓我的項目成爲OSGI包而不是標準的JAR包?
回答
OSGIf項目將允許OSGI用於Eclipse中的依賴項管理,而不是標準的Eclipse項目構建機制或外部依賴項管理工具,如Ivy或Maven。將項目成一個OSGi包可以讓你表達作爲捆綁依賴該項目的軟件包依賴關係(如果束存在包的依賴),這將OSGI框架,而不是與其他機制(標準的Eclipse項目構建/常春藤/ Maven的處理)。
標準的Eclipse項目依賴關係是通過在項目的構建路徑上指定其他項目和庫來建立的。轉換爲OSGI將用MANIFEST.MF import-package或required-bundles聲明替換您的構建路徑引用。在標準的Eclipse機制使用OSGi的依賴管理
優點是:
- 再出口的依賴關係:你的包可以再出口及其相關軟件包,這意味着代碼依賴於你的包不也有依靠你的包的家屬,如果它也使用它們
- 版本管理:使您可以指定一個依賴的最小和最大期望版本。
參見Should I use Eclipse plug-ins (or OSGi Bundles) as a plain dependency management tool?
如果你曾經計劃在OSGi上下文中使用它,那麼你也可以使它成爲一個包。我不知道將它作爲一個捆綁包會有什麼負面影響,但是如果你不把它捆綁起來,並在以後找到需要它的時候,那麼你可能不得不返回並修復它。除此之外,我個人不知道使用清單元信息的OSGi以外的任何東西 - 但正如我所說;我不認爲它會受傷。
僅當它將從OSGi容器中使用時纔有用,如您所述。
如果您正在尋找的,爲什麼它是在普通有用的答案是你可以僅僅通過google搜索找到了很多 - 從維基百科開始:
在一般情況下,我d說OSGi的主要優點是封裝/版本控制,解決JAR地獄和由框架提供的管理,根據您的項目,這可能會或可能不會對您感興趣。
我明確地建議閱讀關於OSGi,如果你還沒有 - 這是非常有趣的技術。我建議讀尼爾·巴特利特對EclipseZone文章 - 這是第一個:
有一羣人,因此谷歌他們 - 非常有趣的閱讀,這也會給你一個想法是否這是你應該考慮的事情。
SpringSource的OSGi的是一個大的支持者,所以值得考慮看看在那裏,太:
OSGi提供了模塊的支持,你可以控制的依賴關係。每個模塊可以包含和排除來自其他包的包。您也可以在運行時替換包。使整個項目成爲一個單一的包沒有這些好處。如果它不能作爲OSGi包使用,那麼我只會將一個像jdbc驅動程序這樣的jar包裝爲包。 首先檢查你的項目是否會有好處。然後確定哪些模塊應該是一個捆綁包。
如果您的項目是一個公共或開源庫,然後請確實使它成爲一個OSGi包。這對OSGi開發人員可能想要使用您的庫很有幫助。
另一方面,如果你的圖書館是私人的,那麼OSG化它的好處是有限的。大多數情況下,如果您決定稍後採用OSGi策略,這將是一個優勢。你也可以從顯式依賴中獲得一些好處,也就是說你可以查看這個包來確定它的依賴關係。
這樣做沒有運行時間成本。清單中的OSGi數據僅被非OSGi運行時忽略。
儘管作爲構建步驟的一部分,您仍然必須生成OSGi清單。用於此目的的最佳工具是Bnd,它可以很容易地集成到任何ANT構建中 - 用它代替「JAR」任務。如果您使用Maven構建,那麼使用Maven Bundle Plugin(內部使用Bnd)。
- 1. 爲什麼maven不在我的jar包中包含JSP文件?
- 2. 如何告訴Eclipse爲所有項目包含標準.jar庫
- 3. 爲什麼GridView項目不包裝?
- 4. 包裝時爲什麼不包含引用的項目?
- 5. 使用依賴包打包python項目的標準方式是什麼?
- 6. 包裝項目作爲JAR戰成項目(搖籃)
- 7. 什麼是標準的OpenGL工具包?
- 8. 爲什麼我的SBT intelliJ不包含依賴關係JAR?
- 9. 爲什麼VS2015中的新項目以.NET 4.5.2而不是4.6.1爲目標?
- 10. 爲什麼不能找到一個osgi包的依賴?
- 11. 爲什麼我們要包含(Object o)而不是Containers(E e)?
- 12. 我的javascript的順序包括標籤的事項,我不明白爲什麼
- 13. 爲什麼使用JSON(對象)而不是標準的ArrayLists?
- 14. GHUnit作爲測試包而不是單獨的目標
- 15. 在Maven項目中包含完整的依賴JAR作爲JAR
- 16. 爲什麼我的Maven項目打包測試文件?
- 17. 爲什麼打包Sharepoint 2010項目會中斷我的引用?
- 18. OSGI包VS JAR依賴
- 19. 爲什麼.PHONY:目標而不是目標:.PHONY?
- 20. OSGi - 爲什麼我的包名爲「unknown-0.0.0」並且MANIFEST.MF文件被覆蓋?
- 21. iPhone開發的目標是什麼?爲什麼我需要不同的目標?
- 22. 爲什麼Scrollspy的目標是外部div而不是ul?
- 23. Eclipse的嚮導OSGI包項目
- 24. 爲什麼CodeIgniter項目有時會包含composer.phar包?
- 25. 爲什麼我可以從JAR加載類而不是資源?
- 26. 爲什麼我的結構變量不包含此成員?
- 27. 爲什麼Android模擬器不註冊外部包含的jar?
- 28. 這是什麼?在Delphi中,「TList不包含名爲...」的成員
- 29. 爲什麼Eclipse給「對象sql不是包org.apache.spark的成員」?
- 30. 我不能在我的項目中包含jar文件
應該可以將其打包爲「捆綁」,或者只是有一個「罐子」包含清單文件?非OSGI開發人員可能更願意擁有一個jar而不是一個bundle。 – 2015-12-08 10:29:17
爲什麼?捆綁**是** JAR。 – 2015-12-08 14:43:04
是的你是對的,我雖然包裝會在聯結「捆綁」,但它不是。 – 2015-12-08 17:01:34