2016-01-25 70 views
0

是否有可能在運行時通過名稱的特定名稱獲取特定OSGi包的絕對路徑的安裝目錄?如果是,如何?如何通過名稱獲取OSGi包的安裝目錄(絕對路徑)?

E.g。我有一個符號名稱爲com.example.e4.rcp.todo.service的軟件包。從一個不同包中的一個類,但在同一個應用程序中,我想確定運行期間的絕對安裝路徑com.example.e4.rcp.todo.service

我不知道這是否相關,但我使用Eclipse Equinox。

+0

什麼是你的「捆綁安裝目錄」? –

+0

這真的只是OSGi還是Eclipse RCP或插件? Eclipse具有用於在其他包中查找對象的方法。 –

+0

你能解釋一下你的意思嗎?以及你想用它做什麼?在OSGi中,沒有安裝目錄。該軟件包的便箋最多有一個目錄。你可以用'bundle.getBundleContext()。getDataFile(path)'獲得。 –

回答

3

沒有可靠的方法來獲取此信息,因爲OSGi軟件包不需要「安裝目錄」。

例如,如果我以下列方式安裝包,將有與具有對文件系統的任何連接的包關聯的什麼:

context.installBundle("urn:mybundle", new URL("http://...").openStream()); 
0

Eclipse Equinox具有FileLocator helper類可用於解析Equinox中的資源。

http://help.eclipse.org/juno/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/FileLocator.html

具體來說,FileLocator#決心可能會幫助你。但是:

但請注意,此API的用戶不應該假設太多關於此方法的結果。雖然它可能會在某些安裝配置中始終返回文件:URL,但其他可能會導致jar:或http:URL。

如果您不能完全控制配置,我會謹慎的依賴它。

0

在春分OSGi的,你可以使用FileLocator.getBundleFile(...)

File bundleFile = FileLocator.getBundleFile(bundle).getCanonicalFile(); 

它返回包JAR文件或者根據包是如何安裝的軟件包目錄的File對象(壓縮或未壓縮就像在一個Eclipse插件)。

我在末尾添加了getCanonicalFile(),因爲我遇到了經常相對路徑元素,如/workspace/project_xyz/bin/../

相關問題