3

仕様に従ってマルチモジュールアプリケーションを開発したいOSGi。私のモジュールの 1 つが を使用していると仮定しましょうApache Commons Logging 1.1.1。Spring はバンドルされたバージョンのApache Commons Logging 1.1.1をリポジトリに提供しているので、対応する依存関係を POM に追加できます。

たとえば、バンドルをインストールする場合、バンドルもインストールするまでApache Felix依存関係Apache Commons Logging 1.1.1が解決されないのは正しいApache Commons Logging 1.1.1ですか? 私のバンドルは、エクスポートされていないパッケージをインポートしようとします。

依存関係管理が世界でどのように機能するのか、私にはよくわかりませんOSGi。アプリケーションに必要なすべてのバンドルをインストールする必要がありますか? また、Maven との統合方法がわかりませんか?

事前にご説明いただきありがとうございます


編集:バンドル管理(展開など)を容易にすると思われるOBRと呼ばれるApache Felixのサブプロジェクトがあるのを見てきました。しかし、ローカルリポジトリ、プライベートリポジトリを備えたMavenアーキテクチャがすでにあります.OBRはどのようにMavenに統合されていますか?

4

2 に答える 2

7

OSGiをmavenと一緒に使用したい場合は、FelixOSGiフレームワークを使用できるサーバーとしてApacheKarafをお勧めします。利点は、mvn:urlsを使用してMavenリポジトリから直接バンドルをインストールできることです。

MavenリポジトリでApacheKarafを使用するだけの場合、実行時に推移的な解決策はありません。必要なすべてのバンドルをインストールする必要があります。非常に役立つのは、karafが機能の概念を持っていることです。したがって、これらの機能を粗いビルディングブロックとして使用できます。他の機能やバンドルを参照する独自の機能を作成することもできます。これにより、1つのコマンドでアプリ全体をインストールできます。

FelixとKarafもOBRをサポートしていますが、独自のOBRリポジトリを作成する必要があります。現在、公開OBRリポジトリはありません。OBRの利点は、推移的な依存関係のほとんどを解決できることです。Karaf機能はOBRと連携して機能するため、機能にトップレベルのバンドルをいくつかリストして、残りをOBRに解決させることができます。

実際には、OBRを使用しない単純なKaraf機能で良い経験をしています。これは手作業ですが、予想よりも少なく、非常にうまく機能します。

于 2012-07-11T20:20:40.990 に答える
2

OSGi の依存関係は Java パッケージに基づいています。バンドルが特定のパッケージをインポートする必要があると述べている場合 (受け入れ可能なバージョンの範囲を示しています)、フレームワークはそのパッケージの適切なバージョンにインポートを「配線」しようとします。別のバンドルでエクスポートする必要があります。

パッケージが見つからない場合、バンドルは解決されず、開始できません。そのため、アプリケーションに必要なすべてのバンドルをインストールする必要があります。クリスチャンが示すように、それを支援するさまざまなツールがあります。

必要なバンドルを取得する簡単な方法は、[2] ( launcher/pom.xml)、私が書いた小さなサンプル アプリです。

また、Sling の maven-launchpad-plugin [3] を使用して、OSGi フレームワークと必要なすべてのバンドルを組み込んだ実行可能な jar ファイルを生成し、起動時にすべてをセットアップすることもできます。

インポートとエクスポートについて - 詳細は省きますが、maven-bundle-plugin [1] を使用してバンドルを構築すると仮定すると、バンドルでエクスポートするパッケージを指定します (他のバンドルは他のバンドルから見えません)。 maven-bundle-plugin はインポートするパッケージのリストを (ほとんどの場合自動的に、必要に応じてオーバーライドできます) 生成するため、エクスポートするパッケージ間で独自のコードがきれいに分割されている場合、通常はあまり作業が必要ありません。および内部実装パッケージ。

[1] http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

[2] https://github.com/bdelacretaz/OSGi-for-mere-mortals

[3] http://sling.apache.org/site/maven-launchpad-plugin.html

于 2012-07-12T13:58:03.723 に答える