8.4. 欠落している依存関係を追跡する方法
欠落している依存関係を追跡するには、次の手順を実行します。
-
bundle:diag
コンソールコマンドを使用します。このコマンドでは、バンドルがアクティブでない理由に関する情報が得られます。使用法については、Apache Karaf コンソールリファレンス を参照してください。 -
クイックチェックを実行して、必要なすべてのバンドルと機能が実際に OSGi コンテナーにインストールされていることを確認します。
bundle:list
を使用してインストールされたバンドルをチェックでき、features:list
を使用してどの機能がインストールされているかをチェックできます。 bundle:install
コンソールコマンドを使用して、バンドルをインストールします (ただし、開始しません)。以下に例を示します。karaf@root()> bundle:install MyBundleURL
bundle:dynamic-import
コンソールコマンドを使用して、インストールしたばかりのバンドルで動的インポートを有効にします。たとえば、バンドルのバンドル ID が 218 の場合に、次のコマンドを入力して、このバンドルの動的インポートを有効にします。karaf@root()> bundle:dynamic-import 218
この設定により、コンテナーにすでにインストールされているバンドルのいずれかを使用して依存関係を解決し、通常の依存関係解決メカニズム (
Import-Package
ヘッダーに基づく) を効果的に迂回できます。これはバージョンチェックを飛ばすので、通常のデプロイメントには推奨しません。間違ったバージョンのパッケージを取得しやすく、アプリケーションが誤動作する可能性があります。これで、バンドルを解決できるはずです。たとえば、バンドル ID が 218 の場合に、次のコンソールコマンドを入力します。
karaf@root()> bundle:resolve 218
バンドルが解決されたと仮定した場合 (
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 ...
-
バンドル JAR ファイルをデプロイメントし、
META-INF/MANIFEST.MF
ファイルのImport-Package
ヘッダーの下に表示されているパッケージを確認します。このリストを前のステップで見つかったパッケージのリストと比較します。ここで、マニフェストのImport-Package
ヘッダーで欠落しているパッケージのリストをコンパイルし、これらのパッケージ名をプロジェクトの POM ファイルの Maven バンドルプラグイン設定のImport-Package
要素に追加します。 動的インポートオプションをキャンセルするには、OSGi コンテナーから古いバンドルをアンインストールする必要があります。たとえば、バンドル ID が 218 の場合には、次のコマンドを入力します。
karaf@root()> bundle:uninstall 218
- これで、インポートされたパッケージの更新されたリストを使用してバンドルを再構築し、OSGi コンテナーでテストできます。
addurl :experimental: :toc: :toclevels: 4 :numbered: