Menu Close

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

不足している依存関係を追跡するには、以下の手順を実行します。

  1. bundle:diag console コマンドを使用します。これにより、バンドルが非アクティブである理由に関する情報が提供されます。使用法については、『Apache Karaf Console Reference』を参照してください。
  2. クイックチェックを実行して、必要なすべてのバンドルと機能が実際にOSGiコンテナーにインストールされていることを確認します。bundle:list を使用して、インストールされているバンドルや features:list を確認して、インストールされている機能を確認できます。
  3. bundle:install console コマンドを使用して、バンドルをインストール(起動しない)します。以下は例になります。

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

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

    この設定により、OSGi はコンテナーにすでにインストールされている バンドル を使用して依存関係を解決でき、通常の依存関係解決メカニズム( 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: