A.3. バンドルプラグインの設定
概要
バンドルプラグインを機能させるために必要な情報はほぼありません。必要なすべてのプロパティーは、デフォルト設定を使用して有効な OSGi バンドルを生成します。
デフォルト値のみを使用して有効なバンドルを作成できますが、値の一部を変更することを推奨します。プラグインの instructions
要素内のほとんどのプロパティーを指定できます。
設定プロパティー
一般的に使用される設定プロパティーのいくつかは次のとおりです。
バンドルのシンボリック名の設定
デフォルトでは、バンドルプラグインは Bundle-SymbolicName
プロパティーの値を groupId + "." +
artifactId に設定します。ただし、以下の例外があります。
groupId にセクションが 1 つしかない (ドットがない) 場合には、クラスを含む最初のパッケージ名が返されます。
たとえば、グループ ID が
commons-logging:commons-logging
の場合、バンドルのシンボリック名はorg.apache.commons.logging
です。artifactId が groupId の最後のセクションと同じ場合には、groupId が使用されます。
たとえば、POM がグループ ID およびアーティファクト ID を
org.apache.maven:maven
として指定すると、バンドルのシンボリック名はorg.apache.maven
になります。artifactId が groupId の最後のセクションで始まる場合には、その部分は削除されます。
たとえば、POM がグループ ID およびアーティファクト ID を
org.apache.maven:maven-core
として指定すると、バンドルのシンボリック名はorg.apache.maven.core
になります。
バンドルのシンボリック名に独自の値を指定するには、例A.2「バンドルのシンボリック名の設定」に示すように、プラグインの instructions
要素に Bundle-SymbolicName
の子を追加します。
例A.2 バンドルのシンボリック名の設定
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
...
</instructions>
</configuration>
</plugin>
バンドル名の設定
デフォルトでは、バンドルの名前は ${project.name}
に設定されます。
バンドルの名前に独自の値を指定するには、例A.3「バンドル名の設定」に示すように、プラグインの instructions
要素に Bundle-Name
の子を追加します。
例A.3 バンドル名の設定
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Bundle-Name>JoeFred</Bundle-Name>
...
</instructions>
</configuration>
</plugin>
バンドルのバージョンの設定
デフォルトでは、バンドルのバージョンは ${project.version}
に設定されます。ダッシュ (-
) はピリオド (.
) に置き換えられ、数字は 4 桁に変換されます。たとえば、4.2-SNAPSHOT
は 4.2.0.SNAPSHOT
になります。
バンドルのバージョンに独自の値を指定するには、例A.4「バンドルのバージョンの設定」に示すように、プラグインの instructions
要素に Bundle-Version
の子を追加します。
例A.4 バンドルのバージョンの設定
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Bundle-Version>1.0.3.1</Bundle-Version>
...
</instructions>
</configuration>
</plugin>
エクスポートされたパッケージの指定
デフォルトでは、OSGi マニフェストの Export-Package
リストには、ローカルの Java ソースコード (src/main/java
下) のすべてのパッケージが反映されます。ただし、デフォルトのパッケージ、.
、および .impl
または .internal
が含まれるすべてのパッケージを 除きます。
プラグイン設定で Private-Package
要素を使用し、エクスポートするパッケージのリストを指定しない場合、デフォルトの動作ではバンドルの Private-Package
要素にリストされているパッケージのみが含まれます。パッケージはエクスポートされません。
デフォルトの動作では、パッケージが非常に大きくなり、非公開にしておく必要のあるパッケージがエクスポートされる可能性があります。エクスポートされるパッケージのリストを変更するには、Export-Package
の子をプラグインの instructions
要素に追加します。
Export-Package
要素は、バンドルに含まれるパッケージとエクスポートされるパッケージのリストを指定します。パッケージ名は、*
ワイルドカードシンボルを使用して指定できます。たとえば、エントリー com.fuse.demo.*
は、プロジェクトのクラスパスにある com.fuse.demo
で始まるすべてのパッケージが含まれます。
除外するパッケージを指定するには、エントリーに !
の接頭辞を追加します。たとえば、エントリー !com.fuse.demo.private
は、パッケージ com.fuse.demo.private
を除外します。
パッケージを除外する場合に、リスト内のエントリーの順序が重要です。リストは最初から順番に処理され、それ以降の矛盾するエントリーは無視されます。
たとえば、パッケージ com.fuse.demo.private
を除く com.fuse.demo
で始まるすべてのパッケージを含めるには、以下のようにパッケージのリストを指定します。
!com.fuse.demo.private,com.fuse.demo.*
ただし、com.fuse.demo.*,!com.fuse.demo.private
を使用してパッケージをリスト表示すると、com.fuse.demo.private
は最初のパターンと一致するため、バンドルに含まれます。
プライベートパッケージの指定
バンドルに追加するパッケージのリストを指定してそれらをエクスポート しない 場合、バンドルプラグイン設定に Private-Package
命令を追加できます。デフォルトでは、Private-Package
命令を指定しないと、ローカルの Java ソースのすべてのパッケージがバンドルに含まれます。
パッケージが Private-Package
要素と Export-Package
要素の両方のエントリーと一致する場合は、Export-Package
要素が優先されます。パッケージがバンドルに追加され、エクスポートされます。
Private-Package
要素は、バンドルに含まれるパッケージのリストを指定する点で Export-Package
要素と同様に機能します。バンドルプラグインは、リストを使用して、バンドルに含まれるプロジェクトのクラスパスにあるすべてのクラスを検索します。これらのパッケージはバンドルにパッケージ化されますが、(Export-Package
命令で選択されない限り) エクスポートされません。
例A.5「プライベートパッケージのバンドルへの追加」 はバンドルにプライベートパッケージを含めるための設定です。
例A.5 プライベートパッケージのバンドルへの追加
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Private-Package>org.apache.cxf.wsdlFirst.impl</Private-Package>
...
</instructions>
</configuration>
</plugin>
インポートされたパッケージの指定
デフォルトでは、バンドルプラグインは OSGi マニフェストの Import-Package
プロパティーに、バンドルのコンテンツによって参照されるすべてのパッケージのリストを反映させます。
ほとんどのプロジェクトでは通常、デフォルトの動作で十分ですが、リストに自動的に追加されないパッケージをインポートする場合があります。デフォルトの動作では、不要なパッケージがインポートされる可能性もあります。
バンドルによってインポートされるパッケージのリストを指定するには、Import-Package
の子をプラグインの instructions
要素に追加します。パッケージリストの構文は、Export-Package
要素および Private-Package
要素の場合と同じです。
Import-Package
要素を使用する場合、必要なインポートの有無を判断するのにプラグインはバンドルの内容を自動的にスキャンしません。バンドルの内容がスキャンされるようにするには、パッケージリストの最後のエントリーとして *
を配置する必要があります。
例A.6「バンドルでインポートされたパッケージの指定」 は、バンドルでインポートされたパッケージを指定する設定です。
例A.6 バンドルでインポートされたパッケージの指定
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Import-Package>javax.jws, javax.wsdl, org.apache.cxf.bus, org.apache.cxf.bus.spring, org.apache.cxf.bus.resource, org.apache.cxf.configuration.spring, org.apache.cxf.resource, org.springframework.beans.factory.config, * </Import-Package>
...
</instructions>
</configuration>
</plugin>
補足情報
バンドルプラグインの設定の詳細には、以下を参照してください。