如何为 OSGi R7 元类型注释强制(到 1.2.0)OSGi XMLNS

How to force (to 1.2.0) OSGi XMLNS for OSGi R7 Metatype annotations

我正在将一个项目更新为 OSGi R6 注释(由于我的依赖项已部署到我的容器,我有限制 运行ing OSGi R7)并且 运行 遇到了我的旧 Apache 的问题Felix SCR 注释中有破折号,这在 OSGi R6 中是不可能的。

我试图在转移到 OSGi R6 注释的同时保持我现有的 OSGi 属性不变(包含破折号),但事实证明这很困难。

我现在想做的是使用通过 $_$ 支持破折号的 OSGi R7 注释,并寻找某种方法可以强制 /target/classes/OSGI-INF/metatype XML 文件具有

<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.2.0"...

而不是

<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.4.0"...

..这是我的应用程序中的不兼容性(无法解析 1.4.0 命名空间,不,我无法更新我的 Metatype 服务)。

有什么方法可以在我的元类型 XML 生成上强制使用 XMLNS 吗?我可以通过指定 @Component(xmlns="http://www.osgi.org/xmlns/metatype/v1.2.0") 在 /target/classes/OSGI-INF 的组件 XML 文件上强制它,但是这将它设置为组件而不是元类型(我需要它用于元类型)。

我正在使用:

   <groupId>org.apache.felix</groupId>
   <artifactId>maven-bundle-plugin</artifactId>
   <version>4.1.0</version>

有什么想法可以实现吗?

Bnd 唯一会发出 Metatype 1.4 命名空间的情况是,如果您使用 PREFIX_ 常量作为元素名称的前缀,如果您使用名称来自类型而非元素的单个元素注释,或者如果您使用 $_$- 的名称映射。由于您想使用最后一项,因此 xml 必须使用 1.4 命名空间,因为 xml 的所有处理器都必须理解新的名称映射规则。如果您可以强制将命名空间版本设置为较低版本,则较旧的处理器将无法识别 xml 文档使用的较新功能并错误地处理它们。

因此,如果您想使用需要运行时了解这些功能的 Metatype 1.4 功能,那么您必须使用了解这些 Metatype 1.4 功能的运行时组件。