是否有可能在運行時通過名稱的特定名稱獲取特定OSGi包的絕對路徑的安裝目錄?如果是,如何?如何通過名稱獲取OSGi包的安裝目錄(絕對路徑)?
E.g。我有一個符號名稱爲com.example.e4.rcp.todo.service
的軟件包。從一個不同包中的一個類,但在同一個應用程序中,我想確定運行期間的絕對安裝路徑com.example.e4.rcp.todo.service
。
我不知道這是否相關,但我使用Eclipse Equinox。
是否有可能在運行時通過名稱的特定名稱獲取特定OSGi包的絕對路徑的安裝目錄?如果是,如何?如何通過名稱獲取OSGi包的安裝目錄(絕對路徑)?
E.g。我有一個符號名稱爲com.example.e4.rcp.todo.service
的軟件包。從一個不同包中的一個類,但在同一個應用程序中,我想確定運行期間的絕對安裝路徑com.example.e4.rcp.todo.service
。
我不知道這是否相關,但我使用Eclipse Equinox。
沒有可靠的方法來獲取此信息,因爲OSGi軟件包不需要「安裝目錄」。
例如,如果我以下列方式安裝包,將有與具有對文件系統的任何連接的包關聯的什麼:
context.installBundle("urn:mybundle", new URL("http://...").openStream());
如果你想存儲所擁有的一些數據捆綁,您應該使用BundleContext.getDataFile(String)
Eclipse Equinox具有FileLocator helper類可用於解析Equinox中的資源。
具體來說,FileLocator#決心可能會幫助你。但是:
但請注意,此API的用戶不應該假設太多關於此方法的結果。雖然它可能會在某些安裝配置中始終返回文件:URL,但其他可能會導致jar:或http:URL。
如果您不能完全控制配置,我會謹慎的依賴它。
在春分OSGi的,你可以使用FileLocator.getBundleFile(...)
File bundleFile = FileLocator.getBundleFile(bundle).getCanonicalFile();
它返回包JAR文件或者根據包是如何安裝的軟件包目錄的File對象(壓縮或未壓縮就像在一個Eclipse插件)。
我在末尾添加了getCanonicalFile()
,因爲我遇到了經常相對路徑元素,如/workspace/project_xyz/bin/../
。
什麼是你的「捆綁安裝目錄」? –
這真的只是OSGi還是Eclipse RCP或插件? Eclipse具有用於在其他包中查找對象的方法。 –
你能解釋一下你的意思嗎?以及你想用它做什麼?在OSGi中,沒有安裝目錄。該軟件包的便箋最多有一個目錄。你可以用'bundle.getBundleContext()。getDataFile(path)'獲得。 –