如何将OSGI包的资源共享给其他包

时间:2013-09-06 10:42:48

标签: osgi

如何将捆绑资源与其他捆绑包(但不仅仅是一个)共享? 例如,我不想将图像或属性文件复制到所有包,而是我想从一个地方访问它们。

我尝试使用Fragment-Host,但是无法指定多个bundle(至少我不知道怎么做) 例如:

   <!-rest of the pom--> 
   <instructions>
       <Fragment-Host>
          com.bundlehost
       </Fragment-Host>
    </instructions>

3 个答案:

答案 0 :(得分:2)

正如Dmytro所说,您可以使用OSGi API方法访问任何捆绑包中的资源。然而,更难的问题是:您如何知道从哪个捆绑包访问这些资源,以及您如何知道它们在捆绑包中的位置?

如果你只是做出假设或硬编码答案,那么你最终会得到一个非常脆弱的系统和捆绑之间的隐藏耦合。然后,当有人将您的捆绑包部署到应用程序但不包含资源包时,一切都会中断。这打破了模块化的重点。

答案 1 :(得分:1)

您可以使用Bundle.getEntryPaths()Bundle.getEntry()来获取捆绑资源。要阅读内容,请使用URL.openStream()

答案 2 :(得分:1)

您还可以使用常规包导入和导出来确保资源位于使用捆绑包的类路径上。例如,请参阅access common property file inside bundle with osgi