2016-11-23 72 views
0

我使用maven-scr-plugin生成組件和元類型描述。我正在從org.apache.felix.scr註釋遷移到org.osgi.service.component註釋。使用maven-scr-plugin和OSGI R6註釋生成元類型描述

卡斯滕齊格勒寫了一個很好的博客如何做這個遷移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註釋生成元類型數據,而不是必須爲每個組件定義一個專用配置類?

回答

1

使用@Designate註釋時會生成元類型。 (在至少BND實現)

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

是的,我明白了,這個工作沒有問題。然而,要正確地做到這一點,我還必須更改所有激活器,如您的示例所示(我知道它可以不用,但在我的類中留下了大量未使用的樣板代碼)。我能否將您的答案看作是確認bnd不支持我正在尋找的方法?然後我可以排除該解決方案路徑,只留下maven-scr插件作爲可能的解決方案。 –

+0

上面的代碼顯示了OSGi是什麼標準化的... –

0

據我所知,您需要爲每個組件分別配置@interface。從@Component註釋中生成元類型也是不可能的,因爲它們沒有描述配置。

+0

的@Component註解有'property'參數,其中被定義爲配置參數的所有基本信息(名稱,缺省值,對象類型)。當然,額外的信息,如限制範圍和燦爛的描述不能被添加,但我不需要這些在我的情況 –

+0

我不認爲創建元類型時將@Component屬性考慮在內,但我可能是錯誤的。也許彼得可以回答。 –

+0

他們不是。 Metatype xml是從ObjectClassDefinition註釋類型生成的。它不是從Component註釋的屬性元素生成的。 –