OSGI缺少需求错误

我是OSGI的新手,我正在试图弄清楚如何解决下面的错误

org.osgi.framework.BundleException:bundle org.foo.serviceBundle中未解决的约束[253]:无法解析253.0:缺少需求[253.0]包; (&(包= org.slf4j)(版本> = 1.6.0)(!(版本> = 2.0.0)))

我使用maven原型生成一个包,并在我的Activator类中添加了一些简单的slf4j日志记录。 我也使用maven bundle插件如下:

 org.apache.felix maven-bundle-plugin 2.2.0 true   org.shoppingsite.Activator    

我尝试了其他组合,我得到一个或另一个无法解析的包。 我正在尝试将捆绑包部署到GlassFish appserver上。 任何帮助将不胜感激

谢谢

这通常意味着您缺少一个导出org.slf4j的包。 这是整个工作流程:

  • maven-bundle-plugin将确保您自己的项目的清单导入org.slf4j(因为您需要它)。

  • 项目POM中的maven依赖项将确保下载slf4j工件

然后有两件事可能出错:

  • 您的编译失败并且找不到slf4j工件(但我想你已经注意到了)

  • 或者您下载的slf4工件没有Manifest或者没有导出org.slf4j。 要查看它,只需查看org.slf4j包的清单。 如果您在像eclipse这样的IDE中直接运行,您可能需要检入$ HOME / .m2 /来查找工件。

如果您的工件没有正确的清单,您将不得不找到一些其他仓库,您可以从中获取适当的捆绑,或修改您获得的仓库并将其安装在本地存储库中(并将其部署在您的本地存储库中)本地maven包存储库(例如nexus),如果你有一个)

最后一点:考虑使用maven-scr插件而不是直接定义激活器和服务发现。 我希望在开始使用OSGi时我已经知道了!

如果您不想为您使用的每个第三方库创建捆绑包的麻烦,可以将其编译到捆绑包中。 尝试

  org.apache.felix maven-bundle-plugin 2.3.6 true   org.shoppingsite.Activator  slf4j-api;scope=compile, log4j;scope=compile     

我不确定Grassfish appserver。 在Fuse ESB中添加 org.slf4j。* ,我们解决了同样的问题。

提供的添加到POM中的依赖项。 阅读http://fusesource.com/docs/ide/7.1/release_notes/release_notes.html