我正在将项目更新为OSGi R6批注(由于将依赖项部署到了我的容器,因此我在运行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服务)。

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

我在用着:

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


关于如何实现此目标的任何想法?

最佳答案

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

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

09-11 15:55