是否有可能在运行时通过名称的特定名称获取特定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)'获得。 –