maven-bundle-plugin
BND を使用する を使用して、ライブラリを OSGi バンドルとしてパッケージ化しています。BND が非常に長いリストを生成していることに気付きました。これは主に、ライブラリ自体によって他のエクスポートされたパッケージのディレクティブでExport-Package
エクスポートされた多くのパッケージが含まれているためです。uses
私は(ちょっと)uses
指令を理解しています。この場合uses
、エクスポートされたパッケージのクラスによって、他のパッケージのクラス ( にリストされている) がメソッド シグネチャで使用されている (したがって、インポートされている) と思います。
この意味で、私は2つの質問があります:
uses
エクスポートされたパッケージのディレクティブに、同じバンドルによってエクスポートされたパッケージを含めることが本当に必要ですか? これらのパッケージは、他のバンドルによってエクスポートされることはありません。したがって、分割パッケージはありません。- この動作は、ライブラリのパッケージ構造が正しく定義されていないことを示していますか? 最上位パッケージで使用されるいくつかのクラスは、多くの場合、サブパッケージにあり、その逆もあります。これは、OSGi バンドルに適合されたライブラリーです。パッケージ構造は、OSGi フレンドリーになるようには設計されていません。
ほとんどのエクスポートされたパッケージが MANIFEST にリストされている方法は次のとおりです。
Export-Package: org.lib.annotation;version="10",org.lib.coverage;version="10";
uses:="javax.measure.unit, org.lib.annotation,org.lib.geometry,org.lib.ref,org.
lib.ref.operation,org.ref.util"
uses
上記のリストのすべてのパッケージjavax.measure.unit
から、別のバンドルからのみインポートされます。
maven-bundle-plugin
構成:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.4.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${parsedVersion.osgiVersion}</Bundle-Version>
<Export-Package>org.lib.*;version=${project.version}</Export-Package>
<Import-Package>*</Import-Package>
<_experiments>true</_experiments>
</instructions>
</configuration>
</plugin>