Osgi Karaf在包中缺少类

Osgi Karaf在包中缺少类,osgi,osgi-bundle,karaf,Osgi,Osgi Bundle,Karaf,我正在karaf的deploy文件夹中部署httpclient-4.3.4.jar。在终端中,当我使用命令find class HttpClients时,并没有列出任何内容。当使用关键字find class HttpClient时,我只为HttpClient包加载了以下类。由于缺少一些类,我在一个依赖包中得到java.lang.NoClassDefFoundError:org/apache/http/impl/client/HttpClients 我需要知道有些课程是不可用的。如果它是我们自己的

我正在karaf的deploy文件夹中部署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

首先,它是一个有效的OSGi捆绑包,没有必需的清单条目和正确的包导出/导入,这将无法工作。 如果您只是将其放在deploy文件夹中,它可能会自动包装,但这并不总是有效的。最好使用现有捆绑包或使用以下软件进行安装:

osgi:install wrap:mvn:groupID/artifactID/version
所有这些也都记录在文档中

已安装的捆绑包可以通过以下方式启动:

start ID
其中ID是刚安装的捆绑包的ID

编辑:

您肯定需要包装有问题的捆绑包,因为它还不是OSGi捆绑包。 因此,在您的情况下,请执行以下操作:

install wrap:mvn:org.apache.httpcomponents/httpclient/4.3.4
安装捆绑包后:

start ID
如果在此之后执行一个bundle:header,您将得到一个很好的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

请留下评论,如果向下voting你如何尝试部署它?你使用ant、maven还是什么?@antogerva我使用maven进行部署这在我的本地机器上运行良好。但当我将同一个jar部署到服务器时,我遇到了这个问题。我尝试将我在本地使用的同一个karaf文件夹复制到服务器,我可以复制上述问题。您是如何尝试的?将其放到deploy文件夹中,还是通过shell安装?日志文件说明了什么?我尝试将文件放到deploy文件夹中,并且我的maven构建将把jars文件直接发布到deploy文件夹中。无论哪种方式,都没有警告或错误日志。一切似乎都很好。甚至包也会启动并处于活动模式。[仅供参考,local是一台mac机器,server是一台unix机器]为了安全起见,请通过shell命令osgi:install wrap:mvn:groupID/artifactID/version->这就是您在这里指的shell命令?