我是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插件如下:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.2.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Activator>org.shoppingsite.Activator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
我尝试了其他组合,我得到一个不可解析的包或另一个包。我正在尝试将该软件包部署到GlassFish appserver上。任何帮助将不胜感激
谢谢
答案 0 :(得分:8)
这通常意味着您缺少导出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时我已经知道了!
答案 1 :(得分:4)
如果您不想为您使用的每个第三方库创建捆绑包,可以将其编译到捆绑包中。尝试
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.6</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Activator>org.shoppingsite.Activator</Bundle-Activator>
<Embed-Dependency>
slf4j-api;scope=compile,
log4j;scope=compile
</Embed-Dependency>
</instructions>
</configuration>
</plugin>
答案 2 :(得分:0)
我不确定Grassfish appserver。在Fuse ESB中添加&lt; Import-Package&gt; org.slf4j。*&lt; / Import-Package&gt;,我们解决了同样的问题。
答案 3 :(得分:-2)
添加&lt; scope&gt;提供&lt; / scope&gt;到POM中的依赖关系。 阅读http://fusesource.com/docs/ide/7.1/release_notes/release_notes.html