OSGi Karaf无法解决依赖问题

时间:2012-11-30 09:11:42

标签: maven osgi

这个问题类似于发布的问题,但这有点不同。

我使用过Google guava,当maven安装时会出现以下错误

Error executing command: Could not start bundle mvn:com.mycompany.webservices/dto/1.0.0 in feature(s) WebServicesGateway-0.0.0: Unresolved constraint in bundle 
com.mycompany.webservices.dto [224]: Unable to resolve 224.0: missing requirement [224.0] osgi.wiring.package; (&(osgi.wiring.package=com.google.common.base)(version>=13.0.0)(!(version>=14.0.0
)))

当在pom.xml中标记以下内容时,maven安装正常。

<Import-Package>!com.google.common.base,

但这会在运行时导致classDEFNotFound异常。

java.lang.NoClassDefFoundError: com/google/common/base/Objects

我已尝试将版本放入导入中以限制版本号

<Import-Package>com.google.common.base;version="[13.0,13.0]", 

我试图将其限制为12.0,11.0和10.0,但错误保持不变。

我检查了maven .m2存储库,jar文件看起来不错。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

你必须将guava库放到你的osgi环境中,这将导出你的bundle需要的包。番石榴罐的当前版本(13)准备好了osgi。只需将该jar放入karaf的deploy文件夹即可。你应该没问题。

关于您的解决方案试用:在大多数情况下,您不需要在pom中手动设置Import-Package属性 - maven bundle插件确实为您解决了这个问题。如果您的捆绑包清单中出现像com.google.guava这样的导入包,则表示您确实在捆绑包中使用了该包 - 因此手动排除它将无法解决问题。实际上,OSGi试图通过要求在启动捆绑包之前解析导入来保护您免受ClassNotFoundException的攻击,您已通过设置import-package属性来利用该保护机制。