我还不是经验丰富的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.0
和4.0
捆绑包均在osgi_container/bundles
文件夹中。
我什至尝试将我的捆绑包强制为<export-package>
com.google.inject
,并且捆绑包“有效”。错误开始要求另一个库。 </stupid attemtps>
所以我被困在这一点上。感谢您的任何建议。
答案 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依赖项树。因此,它们真的很难安装。