【问题标题】:How to share resources of a OSGI bundle to other bundles如何将 OSGI 包的资源共享给其他包
【发布时间】:2013-09-06 10:42:48
【问题描述】:

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

我尝试使用 Fragment-Host,但是无法指定多个捆绑包(至少我不知道如何) 例如:

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

【问题讨论】:

  • 当您在多个地方需要东西时,警钟总是在我脑海中响起,因为这意味着这些模块之间存在耦合。有时是不可避免的,但总的来说,我想了解在多个地方是否真的需要它们。如果是这样,将这些共享资源转换为服务通常是表达依赖关系的最佳方式。

标签: osgi


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        • 2019-06-18
        • 2012-07-30
        • 2010-11-17
        • 1970-01-01
        相关资源
        最近更新 更多