1

私は、maven(maven-bundle-plugin)とapachekarafを使用してosgiバンドル開発の最初のステップを作成しています。私の質問は:別のバンドルのパッケージをインポートするにはどうすればよいですか?

バンドルAとBが2つある場合、バンドルAがパッケージ「package.from.bundle.A」をエクスポートするとします。これは、バンドルAプロジェクトのpom.xmlで宣言できます。

 ...
<instructions>
 ...
  <Export-Package>
    package.from.bundle.A*;version=${project.version}
  </Export-Package>
  <Import-Package>
       *
  </Import-Package>
</instructions>
...

しかし、バンドルBでそのパッケージを使用することをどのように宣言できますか?プロジェクトBのpomファイルのimport-packageタグの間にpackagenameを書き込むだけでは、これは機能しません...

 ...
<instructions>
 ...
  <Export-Package>
  </Export-Package>
  <Import-Package>
       package.from.bundle.A
  </Import-Package>
</instructions>
...

Mavenは、このパッケージがどのバンドルプロジェクトに関連しているかをどのように知るのですか?Mavenを使用してバンドル間の依存関係を使用するにはどうすればよいですか?

ありがとうございました

4

2 に答える 2

1

Mavenバンドルプラグインは、内部でbndを使用します。これは、バイトコード分析を使用して、コンパイルされたコードからのインポートを遡及的に処理します。パッケージのエクスポートは設計上のものであるため、明示的に指定する必要があります。

ターゲットフォルダーで生成されているマニフェストを確認できます。これは、ユーザーに代わって何が行われているのかを確実に理解することをお勧めします。

于 2012-07-14T01:13:39.543 に答える
1

必要なすべてのバンドルに maven の依存関係を設定する必要があります。これは、maven でのコンパイル手順に必要です。カバーの下にある maven バンドル プラグインまたは bnd は、ビルド結果を分析します。提供するすべてのパッケージを自動的に検出し、impl のような名前が含まれていない限り、それらをエクスポートします。また、インポートするすべてのパッケージを検出し、それらの Import-Package ステートメントを作成します。そのため、ほとんどの場合、インポートとエクスポートを構成する必要はありません。したがって、それらを空のままにして、jar 内のマニフェストを確認してください。正しくない場合のみ、手動で構成する必要があります。追加のインポートを構成する場合は、忘れずに ,* を追加してください。これを忘れると、自動的に検出されたパッケージが追加されず、通常は不要なパッケージをすべて手動で指定する必要があります。

于 2012-07-14T18:51:56.927 に答える