0

我在 karaf 的部署文件夹中部署 httpclient-4.3.4.jar。在终端中,当我使用命令 find-class HttpClients 时,没有列出任何内容。当使用关键字 find-class HttpClient 时,我只为 httpclient 包加载了以下类。由于缺少某些类,我在我的一个依赖包中得到了 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

首先,它是否是一个有效的 OSGi 包,没有所需的清单条目和正确的 Package-Exports/Imports 这将不起作用。如果您只是将它放在部署文件夹中,它可能会自动包装,但这并不总是有效。最好使用现有的 Bundle 或安装:

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

所有这些都记录在Karaf 用户手册中。

安装的包可以用

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 回答