4

大規模なアプリケーションの展開オプションとして Felix での OBR の使用を調査していますが、いくつかの初期のハードルに遭遇しました。

取られたアプローチ

  1. 「Require-Bundle:」セクションで、すべての単一アプリケーションの依存関係 (基本的には手動展開のすべて) を、サードパーティのライブラリに至るまで一覧表示する manifest.mf を含む新しい jar を作成しました。私の意図は、最初にすべてを宣言し、次にペアリングして、OBR を介してサードパーティのバンドルを解決することでした。
  2. maven-bundle-plugin を使用して、ローカルの .m2 リポジトリを OBR としてインデックス付けしました

    mvn org.apache.felix:maven-bundle-plugin:2.3.7:index
    
  3. Apache Felix を起動し、OBR リポジトリを追加しました

    obr:repos add file:///~/.m2/repository/repository.xml
    
  4. アプリケーションのバンドル依存関係リスト全体を含む 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 実装が使用され、アプリケーションは問題なく起動します。

質問

  1. Spring の javax.inject 実装を含む、高レベルのアプリケーション jar 内のすべての依存関係を一覧表示しました。Felix の OBR リゾルバーがパッケージ要件を解決しようとしているのはなぜですか? この方法で (単一のバンドルを使用して) デプロイしようとすると、深さ優先の方法で OBR 解決が行われますか?
  2. パッケージ機能の競合がないことを確認するために、サードパーティ製ライブラリの OBR リポジトリを作成/維持するために通常使用される戦略は何なのか知りたいです。アプリケーションの依存関係のみを含み、パッケージ機能の競合がない、より小さな OBR リポジトリ インデックスを作成して維持する必要がありますか? 役立つMavenプラグインはありますか?
  3. より広いコミュニティは、OBR を介して一度に 100 を超えるバンドルをどのようにデプロイしますか? おそらく、親バンドル ソリューションよりも優れたオプションがあります。
4

0 に答える 0