Apache servicemix OSGi捆绑包无法导入软件包

时间:2018-07-20 08:02:28

标签: java osgi

我还不是经验丰富的OSGi用户,因此遇到了一些问题。

我试图将org.apache.servicemix.bundles.hadoop-client用作外部hadoop提供者,因为我不希望我的捆绑包包含所有这些类。

但是当我运行一组捆绑包(我和org.apache.servicemix.bundles.hadoop-client)时,出现以下错误:

  

错误:捆绑org.apache.servicemix.bundles.hadoop-client [56]错误启动文件:bundles / org.apache.servicemix.bundles.hadoop-client_2.8.1.1.jar(org.osgi.framework。 BundleException:无法解析org.apache.servicemix.bundles.hadoop-client [56](R 56.0):缺少要求[org.apache.servicemix.bundles.hadoop-client [56](R 56.0)] osgi.wiring。包;(&(osgi.wiring.package = corg.osgi.framework.BundleException:无法解析org.apache.servicemix.bundles.hadoop-client [56](R 56.0):缺少requiremom.google.inject)(版本> = 3.0.0)(!(版本> = 4.0.0)))未解决的要求:[[org.apache.servicemix.bundles.hadoop-client [56ent [org.apache.servicemix.bundles.hadoop-client [56 ](R 56.0)] osgi.wiring.package;(&&(osgi.wiring.package = com.google.inject)(ve](R 56.0)] osgi.wiring.package;(&(osgi.wiring.package = com.google.inject)(版本> = 3.0.0)(!(版本> = 4.0.0)))])   rsion> = 3.0.0)(!(version> = 4.0.0)))未解决的要求:[[org.apache.servicemix.bundles.hadoop-client [56](R 56.0)] osgi.wiring.package; (&(osgi.wiring.package = com.google.inject)(版本> = 3.0.0)(!(版本> = 4.0.0))))]           在org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)           在org.apache.felix.framework.Felix.startBundle(Felix.java:2117)           在org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)           在org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)           在java.lang.Thread.run(Thread.java:748)

我了解到org.apache.servicemix.bundles.hadoop-client会导入com.google.inject,并希望其他捆绑软件能够导出它。

我自己的捆绑软件也导入了com.google.inject,并且可以正常运行。唯一的区别是我的捆绑包使用版本3.0,而hadoop想要4.0

com.google.inject 3.04.0捆绑包均在osgi_container/bundles文件夹中。

我什至尝试将我的捆绑包强制为<export-package> com.google.inject,并且捆绑包“有效”。错误开始要求另一个库。 </stupid attemtps>

所以我被困在这一点上。感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

上面例外的核心是这个

(&(osgi.wiring.package=com.google.inject)(version>=3.0.0)(!(version>=4.0.0)))

这意味着hadoop-client需要一个捆绑包,该捆绑包以[3.0.0,4.0.0)版本导出软件包com.google.inject。这意味着从3.0.0到4.0.0为止的所有软件包版本均应有效。

如PanzOr的评论中所述,谷歌guice似乎以不同版本导出了com.google.inject包。最新的guice导出了版本1.4。因此,似乎hadoop客户捆绑包可能已损坏。由于其导入范围使用捆绑软件版本,而不是实际的软件包版本。

顺便说一句。我放弃了在OSGi中安装任何大数据项目的工作。它们似乎都带有许多非OSGi依赖项的hughe依赖项树。因此,它们真的很难安装。