仅在可选依赖项可用时激活 OSGi 组件

Only activate OSGi component when an optional dependency is available

我有一个 OSGi 包,它声明了对 org.osgi.service.subsystem 包的可选依赖项。它使用 DS 监听新的子系统实例的添加。但是,即使依赖项不可用,此 DS 组件也会激活。

有没有办法只在可选依赖项可用时激活此 DS 组件?

基本上,此 DS 组件执行的处理仅在运行时中实际存在子系统时才相关。如果有 none,并且 class 在运行时不可用,则此组件应保持休眠状态。

据我所知这是不可能的。还有一个更大的问题是,如果在你 bundle resolved 之后它变得可用,你的 bundle 将不会自动绑定到可选包。您将必须明确刷新捆绑包。

因此,在这种情况下,更好的解决方案是将组件移动到一个单独的包中,该包对子系统包具有强制依赖性。然后它可以与子系统支持一起安装。