【发布时间】:2011-09-22 09:50:41
【问题描述】:
我是 OSGi 的新手,我创建了一个 OSGi 捆绑包,我在 Apache Felix OSGi 容器中运行它。
捆绑包中包含一个文件资源,我需要将其作为java.io.File 传递给一个方法。要实例化文件对象,“文件”方案中的 URI 或字符串形式的路径是必需的。如何以干净的方式检索其中的任何一个?
我尝试使用
context.getBundle().getResource("/myfile")(其中上下文的类型为 org.osgi.framework.BundleContext),它返回 URI bundle://6.0:0/myfile。
但是这个 URI 不能使用 File(URI uri) 构造函数转换为文件实例,因为它有“bundle”-scheme。
可以尝试构建一个知道工作目录并利用我的包的 bundleId 的位置的路径,但我怀疑这是最佳做法。
有什么想法吗?
【问题讨论】:
-
Equinox 具有特殊的实用程序类,可以以面向未来的方式进行此类转换,但我不了解 Felix。如果您想针对干净的 OSGi API 编写代码,则需要将此文件复制到某个位置,以便您可以轻松检索相应的 File 对象(例如在您的 Bundle.getDataFile() 存储中)。
标签: osgi apache-felix file-access