【问题标题】:Karaf missing classes in bundles捆绑包中的卡拉夫缺少课程
【发布时间】:2014-07-18 23:13:07
【问题描述】:

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

我需要知道为什么有些课程不可用。如果是我们自己的包,我们可以指定导入和导出来控制我们需要公开的类。但是对于外部 jar,为什么会发生这种情况?

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

【问题讨论】:

  • 如果投反对票请留言
  • 您如何尝试部署它?你用的是ant、maven还是什么的?
  • @antogerva 我正在使用 Maven 进行部署

标签: osgi osgi-bundle karaf


【解决方案1】:

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

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

所有这些都记录在Karaf User Manual中。

安装的bundle可以启动

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

【讨论】:

  • 这在我的本地机器上运行良好。但是当我将相同的 jar 部署到服务器时,我遇到了这个问题。我尝试将我在本地使用的同一个 karaf 文件夹复制到服务器,我可以复制上述问题。
  • 你是怎么做到的?将其放在部署文件夹中,还是通过 shell 安装?日志文件在说什么?
  • 我尝试将文件放到部署文件夹中,并且我的 Maven 构建会将 jars 文件直接发布到部署文件夹中。无论哪种方式,都没有警告或错误日志。每件事似乎都很好。甚至捆绑包也已启动并处于活动模式。 [仅供参考,本地是mac机器,服务器是unix机器]
  • 好吧,为了安全起见,通过shell命令安装它
  • osgi:install wrap:mvn:groupID/artifactID/version -> 你指的是shell命令吗?
猜你喜欢
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
相关资源
最近更新 更多