【问题标题】:Can an OSGi fragment bundle publish a declarative service?OSGi 片段包可以发布声明性服务吗?
【发布时间】:2026-01-31 12:05:02
【问题描述】:

我创建了一个片段包,用于访问第二方 jar 的一些添加功能。我的片段应该注册一个服务来公开这个新功能。它似乎不起作用。在深入进行故障排除之前,我想知道这是否允许?也就是说,Felix SCR 的 bundle watcher 是查看还是忽略 Fragment?

【问题讨论】:

    标签: osgi apache-felix declarative-services


    【解决方案1】:

    啊哈,我自己在规范第 112.4.2 节中找到了答案:“SCR 忽略了片段中指定的服务组件清单标头。”这与 3.14.3 一致:“以下列表包含片段包中不得使用的标头:Bundle-Activator”

    【讨论】:

    【解决方案2】:

    是的。但是主机包必须对此开放。通过打开,我的意思是主机包必须配置 Service-Components 标头,以便可以找到片段中的任何描述符。例如:

    Service-Components: OSGI-INF/*.xml 
    

    将在主机捆绑所有附加片段的OSGi-INF/ 文件夹中找到所有.xml 文件。

    我看到 Eclipse SmartHome 项目使用这个解决方案来使他们的 UI 更加可定制。

    更多信息:http://apache-felix.18485.x6.nabble.com/DS-amp-fragments-td5004610.html

    【讨论】:

    • 使用标题Service-Component: OSGI-INF/*.xml(不是复数)对我有用。