0

karaf の deploy フォルダーに httpclient-4.3.4.jar をデプロイしています。ターミナルで find-class HttpClients コマンドを使用すると、何も表示されません。キーワード find-class HttpClient を使用すると、httpclient バンドル用にロードされた次のクラスのみが取得されます。一部のクラスが欠落しているため、依存バンドルの 1 つで java.lang.NoClassDefFoundError: org/apache/http/impl/client/HttpClients を取得しています。

一部のクラスが利用できない理由を知る必要があります。独自のバンドルである場合は、インポートとエクスポートを指定して、公開する必要があるクラスを制御できます。しかし、外部ジャーの場合、なぜこれが起こっているのでしょうか?

httpclient (202) org/apache/http/HttpClientConnection.class org/apache/http/client/HttpClient.class org/apache/http/client/params/HttpClientParams.class org/apache/http/client/utils/HttpClientUtils.class org/apache/http/impl/AbstractHttpClientConnection.class org/apache/http/impl/DefaultHttpClientConnection.class org/apache/http/impl/SocketHttpClientConnection.class org/apache/http/impl/client/AbstractHttpClient.class org/apache/ http/impl/client/AutoRetryHttpClient.class org/apache/http/impl/client/ContentEncodingHttpClient.class org/apache/http/impl/client/DecompressingHttpClient.class org/apache/http/impl/client/DefaultHttpClient.class org/ Apache/http/impl/client/SystemDefaultHttpClient.class

4

1 に答える 1

2

まず、必要なマニフェスト エントリと適切な Package-Exports/Imports がないと、これは機能しません。deploy フォルダーにドロップすると、自動ラップされる可能性がありますが、これは常に機能するとは限りません。既存のバンドルを使用するか、次の方法でインストールすることをお勧めします。

osgi:install wrap:mvn:groupID/artifactID/version

これはすべて、 Karaf User Manualにも記載されています。

インストールされたバンドルは次のコマンドで開始できます

start ID

ここで、ID はインストールしたばかりのバンドルの ID です。

編集:

問題のバンドルはまだ OSGi バンドルではないため、必ずラップする必要があります。したがって、あなたの場合は次のようにします。

install wrap:mvn:org.apache.httpcomponents/httpclient/4.3.4

バンドルのインストール後:

start ID

その後bundle:headerを実行すると、適切なヘッダー定義が得られます。find クラスは、このバンドルに HttpClient クラスを表示します。

karaf@root()> find-class HttpClients

wrap_mvn_org.apache.httpcomponents_httpclient_4.3.4 (78)
org/apache/http/impl/client/HttpClients.class
于 2014-07-22T13:40:11.193 に答える