2016-11-23 12 views
0

maven-scr-pluginを使用してコンポーネントとメタタイプの説明を生成しています。 org.apache.felix.scrアノテーションからorg.osgi.service.componentアノテーションに移行しています。maven-scr-pluginとOSGI R6アノテーションでメタタイプの説明を生成

Carsten Ziegelerは、この移行方法について優れたブログを書いていますhere。ただし、コンポーネント注釈から直接生成されたメタタイプ記述をどのように持つかについては説明していません。代わりに、私はすべてのコンポーネントのために別々の設定@interfaceを作成し、すべてのコンポーネントアクティベータを書き直さなければなりません(少なくとも、追加の@interfaceクラスの付加価値を利用するために)。

osciアノテーションを処理するのにまだmaven-scr-pluginを使用して、org.apache.felix.scr.ds-annotationsに依存関係を追加することができます。ただし、maven-scr-pluginは明示的にオンになっている場合にのみメタタイプ情報を出力します。 felixアノテーションを使用すると、メタタイプの生成を有効にするために、アノテーションの専用パラメータmetatype=trueを使用できます。ただし、このようなパラメータは、OSGiバージョンの@Component注釈では使用できません。

maven-scr-pluginにメタタイプの記述を強制的に作成させる方法はありますか、またはmaven-bundle-plugin(またはbndtools)でosgi @Componentアノテーションに基づいてメタタイプのデータを生成することはできますかコンポーネントごとに専用の構成クラスを定義する必要がありますか?

答えて

1

@Designateアノテーションを使用すると、メタタイプが生成されます。

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

はい、私は理解しましたが、これは問題なく動作します。しかし、これを正しく行うには、あなたの例に示すように、すべてのアクティベータを変更する必要があります(私はそれを行うことはできますが、クラスには未使用の定型コードがたくさん残っています)。私はあなたの答えが私が探しているアプローチをサポートしていないことを確認することができますか?そのソリューションパスを除外し、maven-scr-pluginを可能な解決策として残しておきます。 –

+0

上記のコードは、OSGiが標準化したものを示しています... –

0

あなたが知っている限り、各コンポーネントごとに別々の構成@interfaceが必要です。また、構成を記述していない@Componentアノテーションからメタタイプを生成することもできません。

+0

@Componentアノテーションには、構成パラメータのすべての基本情報(名前、デフォルト値、オブジェクトタイプ)が定義されている 'property'パラメータがあります。もちろん、範囲や説明を追加するなどの追加情報は追加できませんが、私の場合は必要ありません –

+0

メタタイプの作成時に@Componentのプロパティが考慮されているとは思いますが、間違っている可能性があります。たぶん、ピーターはそれに答えることができます。 –

+0

彼らはそうではありません。メタタイプxmlは、注釈付きのObjectClassDefinition型から生成されます。コンポーネント注釈のプロパティ要素からは生成されません。 –

関連する問題