3

私は apache felix のバンドルの開発を開始し、ops4j pax プラグインを使用してそれを行いました。

でプロジェクト構造を作成しpax-create-project、そこで通常のpax-create-bundle. 次に、maven で全体を構築するための初期プロジェクト構造を取得します。ここで重要な点は、バンドルには独自の pom ( bundlename/pom.xml) と bnd ファイル ( bundlename/osgi.bnd) がありますが、の構成maven-bundle-pluginは で既に提供されているということpoms/compiled/pom.xmlです。バンドル メタデータは以下で構成されますpoms/compiled/pom.xmlが、標準のアクティベーターは上記のosgi.bndファイルの下で構成されます。bnd ファイルのデフォルトはBundle-Activator: ${bundle.namespace}.internal.ExampleActivator.

今、私はからの注釈の使用を開始したかったorg.apache.felix.scrので、依存関係の下のバンドル独自の pom にこれを含めました:

<dependency>
  <groupId>org.apache.felix</groupId>
  <artifactId>org.apache.felix.scr</artifactId>
  <version>1.6.0</version>
</dependency>

そして、サービス用のインターフェースを作成しました:

package namespace;

public interface Sample {
  void sayHello();
}

からの注釈を使用した実装と同様にorg.apache.felix.scr:

package namespace.internal;

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import namespace.Sample;

@Component
@Service
public class SampleImpl implements Sample{

  @Activate
  void start(){
    System.out.println("Started SampleImpl.");
  }

  @Deactivate
  void stop(){
    System.out.println("Stopped SampleImpl.");
  }

  @Override
  public void sayHello() {
    System.out.println("Hello!");
  }
}

osgi.bndコンポーネントを開始するには、ファイルに何を配置する必要がありますか? BundleActivator をもう使用していないため、上記のデフォルト エントリを削除する必要がありました。

ここで質問があります。バンドルを開始して出力を表示できるようmvn clean install pax:provisionに、felix 環境を起動するには、上記のファイルに対して何をする必要がありますか? 私も開始しているApache Log Serviceのログ出力をすでに見ましたが、次のように表示されます。

2012.09.28 16:52:44 INFO - Bundle: namespace - BundleEvent STARTED
2012.09.28 16:52:44 INFO - Bundle: namespace - BundleEvent RESOLVED

どんなヒントでも大歓迎です。またはリンク、私は何時間も検索して、scr とバンドルに maven プラグインを使用するための完全なガイドを見つけました。

こんにちは、シェルスキー

4

1 に答える 1

5

これは、このトピックに関する coderwall の記事を修正したものです: http://coderwall.com/p/q39uxq

まず、サブモジュールの一般的なコンパイル構成を poms/compiled/pom.xml から構成します。maven-bundle-plugin がすでにある場所にプラグインを追加します。

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-scr-plugin</artifactId>
    <version><timeofwriting:1.8.0></version>
    <executions>
        <execution>
            <id>generate-scr-scrdescriptor</id>
            <goals>
                <goal>scr</goal>
            </goals>
        </execution>
    </executions>
</plugin>

同じファイルの poms/compiled/pom.xml の下で、maven-bundle-plugin の手順を確認し、 <_include> ステートメントのすぐ下に追加します。

<Service-Component>
    OSGI-INF/serviceComponents.xml
</Service-Component>

それらを使用するために、サブプロジェクトの注釈に依存します。

<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.scr</artifactId>
    <version><timeofwriting:1.6.0></version>
</dependency>
<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>
        org.apache.felix.scr.annotations
    </artifactId>
    <version><timeofwriting:1.7.0></version>
</dependency>

ここで、アノテーション@Componentおよび@Serviceを使用してコンポーネントを定義します。APIバンドルのように何も含めたくない場合は、osgi.bndファイルに「Service-Component: *」を挿入するだけです。これにより、バンドル プラグインは、OSGI.INF を含まないプロジェクトの OSGI.INF が見つからないというエラーを表示しなくなります。

これが誰かに役立つことを願っています;)

乾杯、シェルスキー

于 2012-09-30T11:11:10.247 に答える