将 OSGI DS 组件向后移植到 OSGI R4

Backporting OSGI DS component to OSGI R4

我有一个为 Apache Karaf 4.0.5 开发的组件。然而,事实证明它需要部署在基于旧版本 Felix 的 glassfish 4 上。我在尝试部署时收到此消息:

missing requirement [319.0] osgi.extender; (&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))

但是,我的 pom 文件没有显示对 osgi.component 的任何明确依赖。我想我一定使用了某些 OSGI R5(或 R6?)特定功能,但我不知道哪个会导致此错误。

我如何说服 glassfish 接受我的包,或者更改包的构建/pom,以便在尝试使用依赖于 R5 或更高版本的 OSGI 功能时收到警告?

您可能正在使用最新版本的 bnd 来生成您的包及其元数据。当你的 bundle 有 DS 组件并且你需要 DS 1.3 中的新东西比如字段注入或者你正在使用最新版本的 bnd 时,Bnd 将在 osgi.component 扩展器(这是 DS)上生成需求。

您可以使用 bnd 指令在您的包中禁用要求的生成:

-dsannotations-options: norequirements

https://bnd.bndtools.org/instructions/dsannotations-options.html