【问题标题】:Trouble with dependencies in an OSGI bundleOSGI 包中的依赖问题
【发布时间】:2017-06-05 09:41:38
【问题描述】:

我有一个运行良好的 OSGI 包,我添加了一个 maven 依赖项,unirest 一个轻量级的 HTTP 库,当部署到 serviceMix 时,我得到一个 missing requirement

filter:="(osgi.wiring.package=com.mashape.unirest.http)"

当然,我在我的包中使用该包,但就 serviceMix 而言,该库只是我的 classpath 中的类,就像我自己的类一样

我想我在这里遗漏了一些东西

我知道embed 一个库是可能的,但我不明白为什么需要任何额外的操作?这与仅将该库添加为 maven dependency 有什么不同@

非常感谢任何文章/文档的答案和指针

【问题讨论】:

  • 你对 OSGi 有兴趣吗?
  • 你的包的清单是如何生成的?如果您将库添加为嵌入式依赖项但未生成捆绑清单,则导入仍然存在。
  • manifest 是通过 blueprint-maven-plugin 生成的,它确实导入了那个包,依赖只是一个普通的 maven 依赖
  • @isco blueprint-maven-plugin 不生成清单,它从源注释生成蓝图 XML。请再次检查。
  • 对不起,我是说 maven-bundle-plugin

标签: java maven osgi apache-servicemix


【解决方案1】:

在 maven 和 osgi 中处理依赖项的方式有所不同。 Maven 将依赖项视为单个类路径/类加载器,其中每个 jar 中的类可以访问其他每个 jar 中的类。 这是主要应用程序的历史记录,也是 maven 运行单元测试的方式。

在 osgi 运行时环境中,每个包都有自己的类加载器,默认情况下,只能访问嵌入在自己包中的类和 jar。 每个包中的类都是隔离的,除非包从一个包中导出并导入到另一个包中。

maven bundle 插件试图弥合差距。仅仅给 maven 添加一个依赖是不够的,还必须告诉 maven bundle 插件如何打包和部署。选项是 1) 将依赖项嵌入到包中,或 2) 将依赖项部署为单独的包。 maven bundle 插件默认为选项 2:导入所有内容。

为了更好地理解依赖项的导出,我建议查看 bundle jar 中的清单文件。 (META-INF/manifest.mf) 我只是查看了 maven Central 上的 unirest jar,发现清单中没有导出任何包。事实上 unirest 没有包头,所以它不是 osgi 包。

错误信息 缺少要求:过滤器:=“(osgi.wiring.package=com.mashape.unirest.http)” 表示您的包正在尝试导入包,但 servicemix 没有包导出它。 为了更好地理解这一点,我建议查看你的 bundle jar 中的清单文件。 (META-INF/manifest.mf) 我希望它将包含 com.mashape.unirest.http 的导入。还要查看 servicemix 以查看是否有任何导出它: 来自 try 的命令:exports | grep com.mashape.unirest.http 我希望你不会找到导出它的包。

我建议你将 maven bundle 插件配置为嵌入 unirest 而不是导入它。像这样:

<Embed-Dependency>unirest-java</Embed-Dependency>

(如果您已经有嵌入依赖配置,则需要合并它们。)

参考。 http://felix.apache.org/documentation/subprojects/apache-felix-maven-bundle-plugin-bnd.html#detailed-how-to

另一种方法是通过包装将 unirest-java 部署为一个包。 这可能就像将其复制到部署文件夹一样简单: https://karaf.apache.org/manual/latest/#_wrap_deployer 这将具有共享 unirest-java 的优势。

最后,如果 unirest 自己加载类,那么这可能会与 osgi 不兼容。

【讨论】:

    猜你喜欢
    • 2017-09-10
    • 2012-03-06
    • 2013-01-12
    • 2014-09-14
    • 2015-10-04
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多