我正在一個相當複雜的服務器應用程序中運行Tomcat/WAS等。它也運行在OSGi的上下文中。我的包使用了哪個版本的軟件包?
這裏是讓我非常困惑的場景:(我慢慢地想吸收OSGi的細節)。
「Bundle 1」 - 此捆綁包由另一組開發人員管理,我無法觸摸它。不幸的是,它導出了一個包,稱之爲「包1版1」。
我正在處理另一個包中的代碼,稱之爲「Bundle 2」。這個包在其類路徑中包含一個包含不同版本「包1」的jar,我們稱之爲「包1版本2」。此外,「Bundle 2」導出「Package 1 Version 2」,以便我可以使用的其他一些捆綁包可以使用它。
問題是每個軟件包會看到哪個版本的軟件包?
- 其中一個軟件包「Bundle 1」我無權訪問 -I可以控制3個軟件包:2需要導入實際導出「Package 1 Version 2」和「Bundle 2」的軟件包2版本2「。
一般來說,它可以預測哪個版本將被選中?我目前的理解是它應該如下工作:
對於「Require-Bundle」中列出的所有軟件包,它將採用它首先看到的軟件包。因此,如果「Bundle 2」是Require-Bundle清單條目中唯一發生的bundle,那麼它將使用由「Bundle 2」導出的bundle。另一方面,如果說一個捆綁包包括這個條目「Require-Bundle:BUNDLE_1,BUNDLE_2」,其中BUNDLE_1和BUNDLE_2都導出「Package 1」,那麼由「BUNDLE_1」導出的版本將獲勝並被使用。
我只是想檢查一下,看看這聽起來是否正確,如果有人知道一個很好的信息來源迅速解決這個問題。還要注意,我沒有要求Bundle 1或Bundle 2的捆綁包實際上都需要包含一個Import-Package條目,因爲它們只需使用「Require-Bundle」就可以訪問這個包。
到目前爲止,我的測試表明上述陳述是真實的,但並不全面。
謝謝!
謝謝你的詳細答案,並指出我在哪裏可以找到這個信息! – user622511 2014-11-07 04:30:22