大規模なアプリケーションの展開オプションとして Felix での OBR の使用を調査していますが、いくつかの初期のハードルに遭遇しました。
取られたアプローチ
- 「Require-Bundle:」セクションで、すべての単一アプリケーションの依存関係 (基本的には手動展開のすべて) を、サードパーティのライブラリに至るまで一覧表示する manifest.mf を含む新しい jar を作成しました。私の意図は、最初にすべてを宣言し、次にペアリングして、OBR を介してサードパーティのバンドルを解決することでした。
maven-bundle-plugin を使用して、ローカルの .m2 リポジトリを OBR としてインデックス付けしました
mvn org.apache.felix:maven-bundle-plugin:2.3.7:index
Apache Felix を起動し、OBR リポジトリを追加しました
obr:repos add file:///~/.m2/repository/repository.xml
アプリケーションのバンドル依存関係リスト全体を含む jar をデプロイしようとしました
obr:deploy --required-only --start com.conorjgall.application.definition
問題
Spring の依存性注入を使用するため、javax.inject の一部のバンドルにはパッケージ要件があります。ただし、OBR には、javax.inject の機能をアドバタイズする複数のバンドルがあります。Spring バンドルと Google Guice バンドルの両方で利用できます。残念ながら、OBR リゾルバはアプリケーションの起動を妨げる Guice 実装を選択しているようです。
回避策
OBR インデックスから Guice ライブラリを削除すると、OBR リゾルバーはそれを見つけられないため、Spring 実装が使用され、アプリケーションは問題なく起動します。
質問
- Spring の javax.inject 実装を含む、高レベルのアプリケーション jar 内のすべての依存関係を一覧表示しました。Felix の OBR リゾルバーがパッケージ要件を解決しようとしているのはなぜですか? この方法で (単一のバンドルを使用して) デプロイしようとすると、深さ優先の方法で OBR 解決が行われますか?
- パッケージ機能の競合がないことを確認するために、サードパーティ製ライブラリの OBR リポジトリを作成/維持するために通常使用される戦略は何なのか知りたいです。アプリケーションの依存関係のみを含み、パッケージ機能の競合がない、より小さな OBR リポジトリ インデックスを作成して維持する必要がありますか? 役立つMavenプラグインはありますか?
- より広いコミュニティは、OBR を介して一度に 100 を超えるバンドルをどのようにデプロイしますか? おそらく、親バンドル ソリューションよりも優れたオプションがあります。