【问题标题】:Generate metatype descriptions with maven-scr-plugin and OSGI R6 annotations使用 maven-scr-plugin 和 OSGI R6 注释生成元类型描述
【发布时间】:2017-04-07 12:42:27
【问题描述】:

我正在使用 maven-scr-plugin 生成组件和元类型描述。我正在从 org.apache.felix.scr 注释迁移到 org.osgi.service.component 注释。

Carsten Ziegeler 写了一篇关于如何进行迁移的优秀博客here。但是,这并没有解释如何从组件注释中直接生成元类型描述。相反,我必须为每个组件单独配置@interface,并重写所有组件激活器(至少,利用那些额外的@interface 类的附加值)。

我仍然可以使用 maven-scr-plugin 通过添加对org.apache.felix.scr.ds-annotations 的依赖来处理 osgi 注释。但是,maven-scr-plugin 仅在显式打开时输出元类型信息。使用 felix 注释,@Component 注释中的专用参数 metatype=true 可用于启用元类型生成。但是,@Component 注解的 OSGi 版本中没有这样的参数。

有没有办法强制 maven-scr-plugin 生成元类型描述,或者我可以让 maven-bundle-plugin(或 bndtools)基于 osgi @Component 注释生成元类型数据,而不是让为每个组件定义一个专用的配置类?

【问题讨论】:

    标签: osgi maven-bundle-plugin maven-scr-plugin


    【解决方案1】:

    使用@Designate 注解时会生成元类型。 (至少在 bnd 实现中。)

     @Designate( ocd=Config.class, factory=true )
     @Component
     public class SomeComponent {
        @ObjectClassDefinition
        @interface Config {
           int port();
        }
        @Activate
        void activate( Config config) { }
     }
    

    【讨论】:

    • 是的,我明白了,这没有问题。但是,要正确执行此操作,我还必须更改所有激活器,如您的示例所示(我知道可以不这样做,但这会在我的类中留下很多未使用的样板代码)。我可以将您的回答视为 bnd 不支持我正在寻找的方法的确认吗?然后我可以排除该解决方案路径,只留下 maven-scr-plugin 作为可能的解决方案。
    【解决方案2】:

    据我所知,您需要为每个组件单独配置@interface。也无法从 @Component 注释生成元类型,因为它们不描述配置。

    【讨论】:

    • @Component 注释具有property 参数,其中定义了配置参数的所有基本信息(名称、默认值、对象类型)。当然,不能添加限制范围和解释性描述等附加信息,但我不需要这些信息
    • 我认为创建元类型时不会考虑 @Component 上的属性,但我可能错了。也许彼得可以回答这个问题。
    • 他们不是。元类型 xml 是从 ObjectClassDefinition 注释类型生成的。它不是由 Component 注释的属性元素生成的。
    猜你喜欢
    • 2019-06-17
    • 1970-01-01
    • 2018-04-27
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多