2014-12-05 61 views
0

我想創建一個安裝在運行時的捆綁軟件的備份文件,以便我可以卸載它,然後可能需要從備份重新安裝。是否有人知道如何獲得已經安裝在運行時中的包文件的位置?我想以一種不管OSGi容器如何工作的方式來做到這一點(具體來說,我希望它能在Equinox和Felix中工作)。理想情況下,這是從Bundle對象獲得的信息(或來自從Bundle對象獲取的對象的信息)。獲取OSGi運行時中已經安裝的bundle的InputStream?

編輯:簡而言之,我得到安裝的每個軟件包(bundleContext.getBundles)以及試圖確定軟件包文件路徑的軟件包。

回答

1

你不能這樣做。 OSGi規範不提供任何方式來獲取已安裝包的輸入流。這主要是因爲OSGi不要求捆綁包以JAR的形式出現,也不需要以任何存檔格式存儲。例如,OSGi框架可以將數據包的條目存儲在數據庫中,然後從數據庫中查找請求的類和資源。因此,您看到安裝後不能保證JAR格式中存在捆綁包。

+0

我不喜歡這個答案,但它似乎是不幸的事實。 – 2014-12-08 17:00:02

0

使用bundle.getLocation()。它將返回該軟件包的安裝位置(如果可用)。無法保證您可以從那裏加載捆綁軟件包,但取決於您最初安裝捆綁軟件的方式。

+0

看起來這樣可以在equinox下工作(至少在通過Eclipse運行我的容器時,例如,我不確定從tycho-surefire插件運行它時的行爲是否會相同),但是這不會爲費利克斯工作,因爲費利克斯將捆綁包安裝在不同的位置。 – 2014-12-08 16:04:07

+0

當然,捆綁包可能來自不同的位置,但您仍可以從給定的位置備份它們。 – 2014-12-09 07:59:55

相關問題