首页 文章

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

提问于
浏览
2

我'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 回答

  • 0

    OSGi R6实现的注释处理器生成的元XML没有考虑我正在扩展的OSGI服务中的引用和属性声明 .

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

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

    -dsannotations-options: inherit
    

    如果添加该配置选项,那么您应该看到所需的行为,但是当父类和子类位于不同的包中时,建议不要这样做.2708849_ .

  • 5

    要在maven中使用,您可以通过以下方式定义:

    <plugins>
        <plugin>
            <groupId>biz.aQute.bnd</groupId>
            <artifactId>bnd-maven-plugin</artifactId>
            <version>3.5.0</version>
            <executions>
                <execution>
                    <id>run-bnd</id>
                    <goals>
                        <goal>bnd-process</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <bnd><![CDATA[-dsannotations-options: inherit]]></bnd>
            </configuration>
        </plugin>
    </plugins>
    

相关问题