「OSGiの方法」は、個別の一貫した機能を含む個別のバンドルを開発することです。これらのバンドルにはユーティリティクラスが含まれている場合もあれば、ユーティリティクラスに依存して独自のOSGiサービスを設定している場合もあります。
一方、ユーザーはバンドルにさらされる可能性はほとんどありません。彼らは、タスクを実行したり、問題を解決したりするソフトウェアであるアプリケーションにもっと関心を持っています。通常、アプリケーションは複数のバンドル(たとえば、Import-Packageを介してインポートされたもの)を使用してタスクを実行します。
OSGiの世界でこの関係を形式化するための最良の方法は何ですか?要件の例の1つは、アプリケーションの現在のバージョン番号(バンドルではない)をユーザーに表示するような単純なものです。このバージョン番号はどのようにして発見されますか?
Eclipseには「機能」と呼ばれる概念がありますが、これはOSGi標準ではありません。
Peter KriensはOSGiアプリケーションについて書いていて、彼の記事は理にかなっています。私がそれから得たのは、アプリケーションがバンドルにマップできるということでした。バンドルが何らかの方法で他のバンドルを使用しているだけです。しかし、Import-Packageを使用してアプリケーションバンドルを作成する場合、開発の観点からそれがどのように実現可能かはわかりません。
1つの方法は、Require-Bundleを使用し、独自のバージョンを持つ「アプリケーションバンドル」を作成することですが、OSGiの世界ではRequire-Bundleは眉をひそめています。
ただし、Import-Packageを使用して、必要なすべてのパッケージを必要なバージョンでインポートすると、開発者にかなりのメンテナンスオーバーヘッドが追加され、実行可能ではないと思います。実装パッケージに対しても、最小の変更が行われるたびに、パッケージバージョンを更新する必要があります。その後、「アプリケーションバンドル」でパッケージバージョンへの依存関係を更新します。