java - 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.0
和hadoop
want 4.0
。
com.google.inject
3.0
和捆绑包都4.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-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 依赖的巨大依赖树。所以它们真的很难安装。
推荐阅读
- machine-learning - CatBoostError:catboost/libs/train_lib/dir_helper.cpp:20:无法创建火车工作目录:
- python - Selenium,Python,选择特定 Xpath 的问题
- linux - 为什么 Rsyslog Server 在接收数据时不将文件创建到目录中?
- windows - 任务 ':app:processDebugResources' 执行失败。com.android.build.gradle.internal.tasks.Workers$ActionFacade (Flutter)
- c# - 在 ASP .Net Core MVC 中启动时执行数据库更新
- python - 将 html 标记数据拆分为多个列
- reactjs - react-slick滑块中达到数组长度时如何开始减少slideIndex?
- wordpress - 如果选择了下拉选项之一,我需要显示自定义分类的帖子
- c++ - 使用 C++ 中的字符串向量调用 C API
- nlp - NLP 中用于检测网页中是否存在显着内容的任何工作