OSGI @Component 注解在扩展现有 OSGI 服务时不包括基类所需的引用

标签 osgi aem apache-felix

我正在尝试扩展 OSGI 服务。正在扩展的 OSGI 服务包括一些引用和属性。我正在使用新的 org.osgi.service.component.annotations包裹。 OSGi R6 实现的注释处理器生成的元 XML 不考虑在我正在扩展的 OSGI 服务中所做的引用和属性声明。

Apache Felix Maven SCR 插件很好地处理了这个用例,使用 Felix 注释注释的类也包括基类的引用和属性。

有没有办法让它与官方的 OSGI 注释实现一起工作。我不想回退到 Felix SCR 插件,除非我必须按照他们的官方网站所说的继续执行 OSGI,这是一个尚未使用 SCR 插件的新项目。

最佳答案

The meta XML generated by the annotations processor of OSGi R6 implementation does not account for the reference and property declarations made in the OSGI service I'm extending.



您所期望的行为取决于您用于生成 XML 的构建工具,而不是注释本身。通常,根据父类中的注释生成 XML 并不是一个好主意。这是因为位于构建时的父类可能与位于运行时的父类不同。在这种情况下,生成的注入(inject)站点可能在运行时实际上并不存在,从而导致很多问题。事实上,即使类型相同,您也是从子类引用父类的私有(private)详细信息。

除了这个警告,您可能正在使用基于 bnd 的工具,例如 maven-bundle-pluginbnd-maven-plugin生成 XML 文件。为了避免我提到的问题,bnd 不会在组件的父类中搜索注释,但是可以使用以下指令在配置中覆盖此行为:
-dsannotations-options: inherit

如果您添加该配置选项,那么您应该会看到您想要的行为,但它是 强烈当父类和子类在不同的 bundle 中时,建议不要这样做。

关于OSGI @Component 注解在扩展现有 OSGI 服务时不包括基类所需的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48623834/

相关文章:

java - 如何在运行时控制 OSGi 中的依赖注入(inject)

java - 如何连接 OSGI 包(通过包发送实体)?

java - OSGI org.slf4j.impl 依赖项

java - maven-osgi 项目中的 EventAdmin 为空

java - 在maven pom.xml中总是需要更改vault插件的版本

java - 如何使用 sling servlet 为现有节点创建新属性?

java - OSGi: org.osgi.framework.BundleExceptiom: 无法解析 [16](R 16.0)

java - 如何检查 String[] 类型的页面属性?

jetty - 使用pax web在OSGI容器中部署Web应用程序时出错

java - 使用 Apache Felix iPOJO 事件管理处理程序