1

maven-bundle-pluginBND を使用する を使用して、ライブラリを OSGi バンドルとしてパッケージ化しています。BND が非常に長いリストを生成していることに気付きました。これは主に、ライブラリ自体によって他のエクスポートされたパッケージのディレクティブでExport-Packageエクスポートされた多くのパッケージが含まれているためです。uses

私は(ちょっと)uses指令を理解しています。この場合uses、エクスポートされたパッケージのクラスによって、他のパッケージのクラス ( にリストされている) がメソッド シグネチャで使用されている (したがって、インポートされている) と思います。

この意味で、私は2つの質問があります:

  1. usesエクスポートされたパッケージのディレクティブに、同じバンドルによってエクスポートされたパッケージを含めることが本当に必要ですか? これらのパッケージは、他のバンドルによってエクスポートされることはありません。したがって、分割パッケージはありません。
  2. この動作は、ライブラリのパッケージ構造が正しく定義されていないことを示していますか? 最上位パッケージで使用されるいくつかのクラスは、多くの場合、サブパッケージにあり、その逆もあります。これは、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>
4

1 に答える 1