我熟悉Import-Package
和Export-Package
,但這對我來說是新的。它有什麼作用?私人包清單標題做什麼?
回答
在OSGi容器運行時,它什麼都不做。事實上,它甚至沒有在OSGi規範中提到過(我檢查過R4)。
但是,它可以在構建時由bnd使用的.bnd
文件中指定。如果是這樣,它可以用來確定進入捆綁包的內容。 當bnd構建一個包時,它會自動確定哪些類需要進入包中。包含所有導出的包中的類都包含在內,並且它們所依賴的所有類(傳遞式)也包含在內。這意味着如果一個類似乎沒有被使用,那麼它將不會被包含在該包中。但是,您可以使用Private-Package指令告訴bnd將軟件包的內容包含在軟件包中,即使它看起來未被使用。如果未指定Private-Package指令,則它將由bnd自動生成。
爲Private-Package的文檔的內容如下:
私人包
夾雜物的方法是相同的導出-Package頭,唯一的區別是,是,這些包不出口。這個頭文件將被複制到清單中。如果通過noth選擇了一個包,則導出優先。
私營包= COM。*
其實私募套餐並不僅僅是沒有導出包的更多。如果Private-Package中指定的包沒有在您自己的項目中定義並且沒有導入到Import-Package中,那麼它們會自動內聯到您的jar中。所以這是包含非OSGi依賴關係的簡單方法。請小心,但內聯很容易導致類路徑問題。
如果你知道什麼靜態鏈接然後你明白私人包裝。否則繼續閱讀。
Private-Package是bnd的方式,告訴你必須在jar中但不導出的包。它是而不是一個OSGi頭,但一個bnd'指令'。
該指令定義了必須包含在JAR中的類路徑中的包(帶有通配符)。 bnd是獨一無二的,它從規範中填充JAR,而不是像大多數構建工具那樣的目錄。原因是,除非模塊是「設計好的」,並仔細考慮了它們的佈局,否則它們很少提供模塊化的優勢。
通常,Private-Package指定包含不應與其他包(即實現類)共享的類的包。儘管通常它們來自bnd所用的相應項目,但在類路徑中從任何其他JAR獲取它們是完全可以接受的。
一個用例是一個帶有utils的庫。在一個bundle中轉換一個util庫通常會對依賴造成嚴重破壞,因爲utils往往依賴於很多不相關的東西;你使用一種微小的方法,突然你拖入30Mb的依賴關係。 bnd本身在aQute.lib *包中大量使用此模型,因此不應該導出此庫中的包。這是一個捆綁規模和'下載互聯網'之間的交易。Eclipse和Apache Felix的世界之間可以區別。 Apache Felix捆綁包通常是獨立的,不需要各種支持和util捆綁包,而Eclipse的捆綁包往往需要大量的管道捆綁包。我認爲這種差異很大程度上是由Eclipse的PDE引起的,它使得包含其他項目的軟件包成爲不可能,除非您複製源代碼當然是一個很大的禁忌。
在C世界裏他們有一種叫做靜態鏈接的東西。鏈接程序後,任何未解決的問題將從庫中檢索並添加到目標中。在一定程度上私人包裝是相同的想法。實際上有一個頭條件包,它靜態地鏈接指定的包和它們傳遞依賴的任何東西(只要它們落入模式中)。
最後,bnd顯示未在清單中的Private-Package標頭中導出的擴展包。畢竟,清單應該描述的內容...
如果您是作者,您可以刪除與-removeheaders頭:與< _removeheaders私人封裝(或行家>私營包
- 1. 什麼是清單。/ ...做什麼?
- 2. 什麼是私人包裹的交易?
- 3. 什麼是隱藏私人網址的做法?
- 4. 'bower update'在私人git回購上做了什麼?
- 5. Module.private_constant做什麼?有沒有辦法只列出私人常量?
- 6. 作曲家私人包裝問題
- 7. 保持NuGet包私人化的問題
- 8. 做一個C LIB「私人」
- 9. 測試人員做什麼?
- 10. 標題中的私人類型定義?
- 11. 什麼是清單?
- 12. 什麼是班級私人名字?
- 13. 什麼是.Net中的私人組裝?
- 14. java有什麼私人領域?
- 15. 爲什麼用戶私人功能?
- 16. 爲什麼私人會員繼承?
- 17. 爲什麼允許私人入口?
- 18. 清除標題單頁
- 19. 包括什麼都不做
- 20. 什麼是「#包括‘myfile.php’做
- 21. 嘲諷包私人類
- 22. 設置私人pypi包?
- 23. Azure網站私人包源
- 24. 包括私人範圍
- 25. 我想弄清楚我的清單有什麼問題
- 26. TortoiseSVN清理實際上做了什麼?
- 27. 單身人士目標c澄清
- 28. iSCSI數據包的理解和每個人做什麼
- 29. Amazon EC2 - 什麼是私人DNS和私有IP?
請問爲什麼BND不「私人包裝」所有的非出口類?如果你的項目中有一個類,那是因爲你需要它;所以如果它沒有出口,它不應該是私人的。的話,你什麼時候不需要導出包或者私有包 - 一個包? – Hilikus
你必須指定私有包,因爲bnd並不假定所有來自src目錄的類都應該包含在內,所以沒有範圍允許減少導出軟件包。bnd的類路徑上的任何軟件包都可以包含在軟件包中遺棄或出口。這樣,bnd可以從一個單獨的項目中構建多個bundle,這與大多數構建環境不同。它還允許導出包提供的API包,即使它們來自另一個包/ jar。 –