OSGI 插件访问 resources.jar 中的文件

OSGI plugin access the file in the resources.jar

我必须修改现有应用程序以充当 OSGI 插件,我偶然发现了以下问题。此应用程序依赖于 jar 文件中的 xml 文件,此应用程序也在运行时加载此文件,因此在 OSGI 环境中无法访问它。关于如何解决这个问题的任何建议,到目前为止,我已经尝试了以下解决方案 none 已经产生了任何积极的结果。

这是最初加载的方式

InputStream templateInputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("resources/template.xml");

我试过用下面的方法做的

URL url = null;
try {
  url = new URL("file:/lib/resources.jar");
} catch (MalformedURLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
URL[] urls = {url};
URLClassLoader classLoader = new URLClassLoader(urls, DeclareMapFactory.class.getClassLoader());
Thread.currentThread().setContextClassLoader(classLoader);
InputStream templateInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("resources/template.xml");

这也是一次尝试

InputStream templateInputStream = this.getClass().getClassLoader().getResourceAsStream("resources/template.xml");

Jar 文件在 lib 目录中,通过 MANIFEST.MF

加载

所以让我们假设 template.xml 位于罐子 resources.jar 中的 resources/template。xml。这个 jar 在你的 bundle 中,并使用 Bundle-ClassPath 引用。

在这种情况下,资源 jar 的内容应该添加到包的 class路径中。

因此,当您位于捆绑包的 class 内时,您应该能够执行以下操作:

this.getClass().getClassLoader().getResourceAsStream("resources/template.xml")

如果这不起作用,那么您可能需要以“/”开头路径,但我认为没有它应该可以。