首页 > 解决方案 > Apache servicemix OSGi 包无法导入包

问题描述

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

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

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

inject)(version>=3.0.0)(!(version>=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)(version>=3.0.0)(!(version>=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) 接线。包;(&(osgi.wiring.package=com.google.inject)(version>=3.0.0)(!(version>=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) 接线。包;(&(osgi.wiring.package=com.google.inject)(version>=3.0.0)(!(version>=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,并且可以正常工作。唯一的区别是我的包使用 version3.0hadoopwant 4.0

com.google.inject 3.0和捆绑包都4.0osgi_container/bundles文件夹中。

我什至试图强迫我的捆绑包<export-package> com.google.inject“工作”。错误开始要求另一个库。</stupid attemtps>

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

标签: javaosgi

解决方案


上面异常的核心是这个

(&(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 google guice 在评论中提到的那样,似乎以不同的版本导出了包 com.google.inject。最新的 guice 导出版本 1.4。所以看起来hadoop客户端包可能被破坏了。因为它的导入范围使用捆绑版本而不是实际的包版本。

顺便提一句。我放弃了在 OSGi 中安装任何大数据项目。它们似乎都有大量非 OSGi 依赖的巨大依赖树。所以它们真的很难安装。


推荐阅读