2012-04-11 53 views
3

我正在使用Equinox OSGi實現。當我檢索一個包並詢問它的位置(getLocation()方法)時,返回的字符串前綴爲「initial @ reference」。 OSGi 4.3規範沒有提到這個前綴。是否有另一個文件中指定了這個前綴和其他可能的前綴?bundle.getLocation()的可能前綴

回答

2

這些是Equinox特定的URL前綴(儘管引用:前綴也受到其他OSGi框架的支持)。他們不是OSGi規範的一部分。在Eclipse運行選項:

osgi.bundles 被自動安裝和可選啓動一次系統啓動和運行包的逗號分隔的列表。每個條目的形式爲:

<URL | simple bundle location>[@ [<start-level>] [":start"]] 

的啓動電平表示將在哪個束應該運行在OSGi啓動級別。如果省略了開始級別(> 0整數),則框架將使用該包的默認開始級別。如果添加了「開始」標籤,那麼該軟件包在安裝後將被標記爲啓動。簡單的包位置是相對於框架的父目錄而言的。如果該位置不是完全合格的路徑或URL,則會執行搜索以查找可用的最高版本。請注意,reference:協議只能用於引用由文件:URL指定的內容(例如,reference:file:/path/to/mybundle_1.0.0.jar)。如果該捆綁包是一個目錄捆綁包,則不支持使用文件:URL而不使用引用:(例如file:/path/to/myDirectoryBundle_1.0.0/必須使用引用:file:/path/to/myDirectoryBundle_1.0.0/ )

here是一個描述「初始」和「引用」前綴的線程。

+0

感謝您爲該主題帶來了一些亮點 – 2012-04-11 14:51:14

6

該位置可以幾乎任何東西。如果我安裝一個軟件包如下...

InputStream data = ...; // open a stream from wherever 
context.installBundle("crazy location huh?", data); 

...隨後此包的getLocation()方法將返回「瘋狂的位置吧?」。

如果我試圖調用Bundle.update()的無參數變體,那麼這隻會對我造成問題,因爲框架無法解釋位置字符串以便從該位置更新包。但我總是可以調用Bundle.update(InputStream)方法從我直接指定的數據更新包。