Apache servicemix OSGibundle无法导入包



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

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

但是,当我运行捆绑包集(my和org.apache.servicemix.bundles.hadoop-client(时,我会得到以下错误:

错误:Bundle org.apache.servicemix.bundles.hadoop-client[56]启动文件时出错:bundles/org.apache.servicemik.bundles.hodoop-client_2.8.1.1.jar;(&(osgi.wiring.package=corg.osgi.framework.BundleException:无法解析org.apache.servicemix.bundles.hadoop-client[56](R 56.0(:缺少requiredom.google.inject((版本>=3.0((!(版本>=4.0;(&(osgi.wiring.package=com.google.inject((ve](R56.0(]osgi.wiling.package;(&(osgi.wiring.package=com.google.inject((版本>=3.0((!(版本>=4.0((](rsion>=3.0((!(版本>=4.0(((未解决的需求:[[org.apache.servicemix.bundles.hadoop-client[56](R56.0(]osgi.wiring.package;(&(osgi.wiring.package=com.google.inject((版本>=3.0((!(版本>=4.0((]网址:org.apache.filex.framework.Fix.resolveBundleRevision(felix.java:4111(网址:org.apache.filex.framework.Filex.startBundle(felix.java:2117(网址:org.apache.filex.framework.Fix.setActiveStartLevel(felix.java:1371(网址:org.apache.filex.framework.FrameworkStartLevelImpl.run(FrameworkStartLevel Impl.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.inject3.04.0束都在osgi_container/bundles文件夹中。

我甚至试图将我的捆绑包强制到<export-package>com.google.inject,结果"成功了"。错误开始请求另一个库。</stupid attemtps>

所以我陷入了困境。谢谢你的建议。

上述异常的核心是这个

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

这意味着hadoop客户端需要一个捆绑包来导出版本为[3.0,4.0.0的包com.google.inject。这意味着从3.0.0到4.0.0除外的所有包版本都应该有效。

正如PanzOr在评论中提到的那样,谷歌指南似乎将包com.google.inject导出为不同的版本。最新的guide导出版本1.4。看来hadoop客户端捆绑包可能已经损坏了。由于其导入范围使用捆绑包版本,而不是实际的包版本。

Btw。我放弃了在OSGi中安装任何大数据项目。它们似乎都有大量非OSGi依赖关系的hughe依赖关系树。所以它们真的很难安装。

最新更新