从OSGi包导入资源

时间:2011-09-27 04:55:30

标签: java osgi bundle

使用OSGi中的导入机制,可以直接从另一个包中导入包。但是,我没有成功导入存在于bundle的“root”中的资源。

是否可以将非封装范围的资源导入另一个捆绑包?

我想要达到的目的是:

Bundle A在“root”中有一个文件资源

Bundle B导入bundle A:s包和资源。 通过bundle B:s ClassLoader,我希望能够在bundle A中加载资源,就好像它存在于Bundle B中一样。

3 个答案:

答案 0 :(得分:10)

捆绑包根目录中的资源位于“默认”包中,无法导入或导出。

如果您真的必须通过类加载器访问资源,则需要将它们移动到包中并导出该包。否则,您可以使用Bundle.getEntry()从任何捆绑包的任何位置读取资源。

答案 1 :(得分:1)

您可以使用OSGi Fragment捆绑包。对于您的情况:bundle B是一个主机,bundle A是bundle B的一个片段。但是bundle B可以访问bundle A的所有类和资源(文件夹)。

OSGi Core Spec#3.13 Fragment包中的更多细节

答案 2 :(得分:0)

创建一个新线程,然后创建一个指向所需文件的新类加载器。

看看这个片段:

ClassLoader c = new URLClassLoader(urls);
thread.setContextClassLoader(c);

然后,线程类加载器将能够加载包中的文件,其中URL包括束的绝对位置。