java - 如何强制(至 1.2.0)OSGi XMLNS 用于 OSGi R7 元类型注释

标签 java osgi apache-felix osgi-bundle felix-dependency-manager

我正在将一个项目更新为 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 命名空间,并且我无法更新我的元类型服务)。

有什么方法可以在我的元类型 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 功能的运行时组件。

关于java - 如何强制(至 1.2.0)OSGi XMLNS 用于 OSGi R7 元类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53877334/

相关文章:

logging - OSGi - 外部 jar 文件的日志记录配置

java - 以编程方式跟踪由 eclipse cleanup 完成的文件更改

java - iPOJO : identifier uniqueness namespace for @Publishes and @Subscriber

java - 从生成的 pom 和源构建 Artifact

java - 尝试创建批处理文件来运行 Java 程序时无法找到或加载主类

scala - Scala 2.8.1 和 SBT 可以与 JDK 7 一起使用吗?

java - CDI:bean-discovery-mode=annotated 被忽略

java - Ajax 到 Servlet,URI 编码的查询字符串

java - 如果 OSGi 包使用类加载器,我如何检测它的运行时库?

scala - 使用 Akka Actors 演示 OSGi 的简单 Hello World?