2016-01-25 49 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/../

相关问题