8.4. 欠落している依存関係を追跡する方法

欠落している依存関係を追跡するには、次の手順を実行します。

  1. bundle:diag コンソールコマンドを使用します。このコマンドでは、バンドルがアクティブでない理由に関する情報が得られます。使用法については、Apache Karaf コンソールリファレンス を参照してください。
  2. クイックチェックを実行して、必要なすべてのバンドルと機能が実際に OSGi コンテナーにインストールされていることを確認します。bundle:list を使用してインストールされたバンドルをチェックでき、features:list を使用してどの機能がインストールされているかをチェックできます。
  3. bundle:install コンソールコマンドを使用して、バンドルをインストールします (ただし、開始しません)。以下に例を示します。

    karaf@root()> bundle:install MyBundleURL
  4. bundle:dynamic-import コンソールコマンドを使用して、インストールしたばかりのバンドルで動的インポートを有効にします。たとえば、バンドルのバンドル ID が 218 の場合に、次のコマンドを入力して、このバンドルの動的インポートを有効にします。

    karaf@root()> bundle:dynamic-import 218

    この設定により、コンテナーにすでにインストールされているバンドルのいずれかを使用して依存関係を解決し、通常の依存関係解決メカニズム (Import-Package ヘッダーに基づく) を効果的に迂回できます。これはバージョンチェックを飛ばすので、通常のデプロイメントにはお勧めしません。間違ったバージョンのパッケージを取得しやすく、アプリケーションが誤動作する可能性があります。

  5. これで、バンドルを解決できるはずです。たとえば、バンドル ID が 218 の場合に、次のコンソールコマンドを入力します。

    karaf@root()> bundle:resolve 218
  6. バンドルが解決されたと仮定した場合 (bundle:list でバンドルのステータスを確認)、package:imports コマンドを使用して、バンドルに結び付けた全パッケージの完全なリストを取得することができます。たとえば、バンドル ID が 218 の場合に、次のコンソールコマンドを入力します。

    karaf@root()> package:imports -b 218

    コンソールウィンドウに依存パッケージのリストが表示されます。

    Package                              │ Version       │ Optional   │ ID  │ Bundle Name
    ─────────────────────────────────────┼───────────────┼────────────┼─────┼──────────────────────────────────
    org.apache.jasper.servlet            │ [2.2.0,3.0.0) │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.jasypt.encryption.pbe            │               │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.jsp                │ [7.0.0,)      │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.service.spi.model  │ [7.0.0,)      │            │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.service.spi.util   │ [7.0.0,)      │            │ 217 │ org.ops4j.pax.web.pax-web-runtime
    ...
  7. バンドル JAR ファイルを展開し、META-INF/MANIFEST.MF ファイルの Import-Package ヘッダーの下に表示されているパッケージを確認します。このリストを前のステップで見つかったパッケージのリストと比較します。ここで、マニフェストの Import-Package ヘッダーで欠落しているパッケージの一覧をコンパイルし、これらのパッケージ名をプロジェクトの POM ファイルの Maven バンドルプラグイン設定の Import-Package 要素に追加します。
  8. 動的インポートオプションをキャンセルするには、OSGi コンテナーから古いバンドルをアンインストールする必要があります。たとえば、バンドル ID が 218 の場合には、次のコマンドを入力します。

    karaf@root()> bundle:uninstall 218
  9. これで、インポートされたパッケージの更新されたリストを使用してバンドルを再構築し、OSGi コンテナーでテストできます。

addurl :experimental: :toc: :toclevels: 4 :numbered: