我在一个普通的 Java 应用程序中使用了两个 OSGi 框架。两个框架都从共享目录加载包。
在一个包中,我从资源中加载一个文件。我尝试了不同的方法,例如
this.getClass().getClassLoader().getResourceAsStream(...)
FrameworkUtil.getBundle(XXX.class).getEntry(...)
FrameworkUtil.getBundle(XXX.class).getResource(...)
但不管我使用哪个命令,一开始都可以正常工作。但是,在两个框架中的几个安装和卸载步骤之后。返回的 InputStream 为空。
如果只使用一个 OSGi 框架,我也可以正常工作。
调试了一下,发现Bundle a got with
FrameworkUtil.getBundle(XXX.class)
指向正确的 jar 文件,但是当我在 Bundle 的 BundleData 中查找引用的包文件时,它引用了另一个包的包文件。捆绑文件是 OSGi 框架(在我的例子中是 Equinox)的临时文件,例如可以在本地 Maven 存储库中找到:
.m2\repository\org\eclipse\osgi\org.eclipse.osgi\3.6.0.v20100517\configuration\org.eclipse.osgi\bundles\29\1
任何人都知道这里可能出了什么问题?