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")
如果这不起作用,那么您可能需要以“/”开头路径,但我认为没有它应该可以。
我必须修改现有应用程序以充当 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")
如果这不起作用,那么您可能需要以“/”开头路径,但我认为没有它应该可以。