Karaf在捆绑中缺少课程

时间:2014-07-18 23:13:08

标签: osgi osgi-bundle karaf

我正在karaf的deploy文件夹中部署httpclient-4.3.4.jar。在终端中,当我使用命令find-class HttpClients时,没有列出任何内容。当使用关键字find-class HttpClient时,我只获得为httpclient bundle加载的后续类。由于缺少某些类,我在我的一个依赖包中得到了java.lang.NoClassDefFoundError:org / apache / http / impl / client / HttpClients。

我需要知道乳清有些课程不可用。如果它是我们自己的bundle,我们可以指定import和exports来控制我们需要公开的类。但对于外部罐子,为什么会这样呢?

httpclient(202) 组织/阿帕奇/ HTTP / HttpClientConnection.class 组织/阿帕奇/ HTTP /客户/ HttpClient.class 组织/阿帕奇/ HTTP /客户/ PARAMS / HttpClientParams.class 组织/阿帕奇/ HTTP /客户/ utils的/ HttpClientUtils.class 组织/阿帕奇/ HTTP / IMPL / AbstractHttpClientConnection.class 组织/阿帕奇/ HTTP / IMPL / DefaultHttpClientConnection.class 组织/阿帕奇/ HTTP / IMPL / SocketHttpClientConnection.class 组织/阿帕奇/ HTTP / IMPL /客户/ AbstractHttpClient.class 组织/阿帕奇/ HTTP / IMPL /客户/ AutoRetryHttpClient.class 组织/阿帕奇/ HTTP / IMPL /客户/ ContentEncodingHttpClient.class 组织/阿帕奇/ HTTP / IMPL /客户/ DecompressingHttpClient.class 组织/阿帕奇/ HTTP / IMPL /客户/ DefaultHttpClient.class 组织/阿帕奇/ HTTP / IMPL /客户端/ SystemDefaultHttpClient.class

1 个答案:

答案 0 :(得分:2)

首先,它是一个有效的OSGi包,没有所需的清单条目和正确的Package-Exports / Imports这不会起作用。 如果你只是将它放在deploy文件夹中,它可能会被自动包装,但这并不总是有效。无论是采用现有的Bundle还是安装:

,都会更好
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

如果您在此之后执行捆绑:标头,您将获得一个不错的标头定义。 find类确实显示了此bundle中的HttpClient类:

karaf@root()> find-class HttpClients

wrap_mvn_org.apache.httpcomponents_httpclient_4.3.4 (78)
org/apache/http/impl/client/HttpClients.class