Mavenを使用してServiceMix 4のBundleを作成


Mavenを使用してBundleを作成
SMX 4は、bndツールに基づくApache felixからのMaven bundleプラグイン(Maven bundle plug-in)を使用する.内省してbundle内のクラス(classes)にパッケージ化することで、OSGI bundleのmanifestを自動的に構築できます.このbundleプラグインを使用するには、次の手順に従います.
1.このbundleプラグインをあなたのプロジェクトのPOMファイルに追加します.2.bundleのmanifestを正しく組み立てるために、このプラグインを構成します.
 
ESB OSGIプロジェクトを構築する(Setting Up a FUSE ESB OSGi Project)
ESB OSGIプロジェクトを構築するには以下のことが必要です:1.bundleプラグインをPOMに追加します.2.Mavenにパッケージ化してOSGI bundleを生成するように伝えます.
 
bundleプラグインの追加
bundleプラグインを使用する前に、Apache Felixの依存を増やす必要があります.この依存を増やすと、POMのplug-in部分にbundileプラグインを追加することができます.OSGI bundle plugin-inをPOMに追加
...
<dependencies>
  <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.osgi.core</name>
    <version>1.0.0</version>
  </dependency>
  ...
</dependencies>
...
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-bundle-plugin</artifactId>
      <configuration>
        <instructions>
          <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
          <Import-Package>*,org.apache.camel.osgi</Import-Package>
          <Private-Package>org.apache.servicemix.examples.camel</Private-Package>
        </instructions>
      </configuration>
    </plugin>
  </plugins>
</build>
...

 
Instructions要素には、bundleがどのように構築されているかを説明する要素が含まれています.
  • plug-inは、bundleのsymbolic nameとしてプロジェクトのartifact IDを使用するように構成される.
  • 構成plug-inはbundleのクラスによって導入するjavaパケットをすべて含み、orgを導入する.apache.camel.osgiパッケージ;
  • 構成プラグインはリストされたclassをパッケージ化するが、exportedのパッケージは含まれない.

  • bundleプラグインのアクティブ化(Activatvating the bundle plug-in)
         In order to instruct Maven to use the bundle plug-in you need to instruct it to package the results of the project as a bundle. You do this by setting the POM's packaging element to bundle.
    Bundleプラグインの構成
    すべてのbundleプラグインの必須プロパティにはデフォルト設定があり、目的の値を変更することもできます.ほとんどのプロパティはplug-inのinstructions要素内で定義されます.一般的なプロパティは次のとおりです.
    • Bundle-SymbolicName • Bundle-Name • Bundle-Version • Export-Package • Private-Package • Import-Package
    Setting the bundle's symbolic name
    Bundleプラグインのデフォルト設定bundleのsymbolic name属性値はgroupId+」+artifactId、以下の場合を除きます.
    •groupIdが1つしかない場合(ポイントがない場合)、classesの最初のパッケージ名を使用します•artifactIdとgroupIdの最後のセグメントが同じ場合、groupIdを使用します•artifactIdがgriupIdの最後のセグメントで始まる場合、同じ部分は削除されます.
    bundleのsymbolic nameに値を設定するには、plug-inのinstructions要素の下にサブ要素Bundle-SymbolicNameを追加する必要があります.
    bundleの名前を設定
    デフォルトではbundleの名前は${pom.name}です.bundleの名前を設定するにはplug-inのinstauctions要素の下にBundle-nameサブ要素を追加する必要があります.
    bundleのバージョン番号を設定する
    デフォルトではbundleのバージョンは${pom.version}であり、すべての'-'が'.'に置き換えられます.bundleのバージョン番号を設定するにはplug-inのinstauctions要素の下にBundle-Versionサブ要素を追加する必要があります.
    exported packagesの設定
    デフォルトでは、OSGI manifestのExport-Packageリストは、プロジェクトのすべてのclassパス(Bundle-SymbolicName.*と一致する)を入力したすべてのpackagesです.これらのpackegesもbundleに含まれています.
    重要:plug-in構成項目でPrivate-package要素が使用され、exportのpackageリストが設定されていない場合、デフォルトではpackagesがexportedされていないと考えられます.Private-Package要素にリストされているpackagesのみがbundleに含まれ、exportされます.
    デフォルトの動作は非常に大きなパケットを生成し、一部のexportedのパケットはprivateすべきです.EXportパッケージのリストを変更するには、plug-inのinstructions要素の下にExport-packageサブ要素を追加します.Export-Package要素は、bundleに含まれexportedされるパッケージのリストを定義します.パッケージの名前は*一致で定義できます.バッグの名前に「!指定したパッケージを除外します.特定のパッケージを除外する場合は、パッケージリスト内の各アイテムの順序が重要です.リストを処理するときは順序に従って処理され、最初からリストされた除外アイテムは無視されます.
    設定private packages
    デフォルトではbundleに含まれるすべてのpackagesがexportedします.一部のpackagesがexportedされないようにするには、plug-inのinstructions要素の下にPrivate-Packageサブ要素を加える必要があります.Private-Package要素はほとんどExport-Package要素と同じです.bundleプラグインは、bundleに含まれるがexportedではないProjectのclasspath(bundleに含まれる)の下のすべてのclassを検索するpackageリストを定義します.
    重要:パッケージがPrivate-Package内でも、Export-Package内でも、Export-Packageが前面にある場合、このパッケージはbundleに追加され、Exportedされます.
    imported packagesの設定
    デフォルトでは、bundleプラグインはOSGIマニフェストのImport-Packageプロパティを1つのPackageリストで埋め込みます.Packageリスト内のpackageはbundleで参照されますが、bundleには含まれません.デフォルトの動作はほとんどの典型的なプロジェクトを満たすことができますが、場合によってはimportが必要なpackagesがあります.これらのpackageは自動的にリストに追加されず、デフォルトの動作は不要なpackagesがImportedされる可能性があります.bundleプラグインimportedのpackageリストを定義するには、plug-inのinstructions要素の下にImport-Packgeサブ要素を追加する必要があります.Import-Packgeサブ要素内のpackageリストの構文はExport-Packageと同じです.
    重要:Import-Packge要素を使用する場合、plug-inはbundleの内容を自動的にスキャンして、必要なimport sがあるかどうかを決定しません.bundleの内容がスキャンされるようにするには、*をパッケージ列リストの最後の項目としなければなりません.