我'm trying to extend an OSGI service. The OSGI service that is being extended includes some references and properties. I'使用新的 org.osgi.service.component.annotations
包 . 由OSGi R6实现的注释处理器生成的元XML不考虑我正在扩展的OSGI服务中的引用和属性声明 .
Apache Felix Maven SCR插件很好地处理了这个用例,并且用Felix注释注释的类也包括基类的引用和属性 .
有没有办法让这个工作与官方OSGI注释实现 . 我不想回退到Felix SCR插件,除非我必须像他们的官方网站所说继续进行OSGI实现,这是一个尚未使用SCR插件的新项目 .
2 回答
您期望的行为取决于您用于生成XML的构建工具,而不是注释本身 . 通常,基于父类中的注释生成XML不是一个好主意 . 这是因为位于构建时的父类可能与位于运行时的父类不同 . 在这种情况下,生成的注入站点可能实际上并不存在于运行时,从而导致许多问题 . 事实上,即使类型相同,您也可以从子类引用父类的私有详细信息 .
除了这个警告,你可能正在使用基于bnd的工具,例如
maven-bundle-plugin
或bnd-maven-plugin
来生成XML文件 . 为了避免我提到的问题,bnd不会搜索组件的父类以获取注释,但可以使用以下指令在配置中覆盖此行为:如果添加该配置选项,那么您应该看到所需的行为,但是当父类和子类位于不同的包中时,建议不要这样做.2708849_ .
要在maven中使用,您可以通过以下方式定义: