0

这个问题与发布的问题相似,但这有点不同。

我用过谷歌番石榴,当 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 文件看起来不错。

有什么建议么 ?

4

1 回答 1

3

您必须将 guava 库放到您的 osgi 环境中,这将导出您的捆绑包所需的包。guava-jar 的当前版本 (13) 已准备好 osgi。只需将该 jar 放入 karaf 的部署文件夹中,就可以了。

关于您的解决方案试验:在大多数情况下,您不需要Import-Package在 pom 中手动设置属性 - maven bundle 插件确实为您解决了这个问题。如果一个 Import-Package likecom.google.guava出现在你的包的清单中,这意味着你真的在你的包中使用了那个包——所以手动排除它不会解决问题。实际上,OSGi 试图ClassNotFoundException通过在启动捆绑包之前解决导入来保护您,您已经通过设置 import-package 属性利用了该保护机制。

于 2012-11-30T09:46:41.660 回答