我一直试图制作OSGI REST套装。我把它编成了一个人为的最小化示例,其中包含一个使用一些注释的单个类工作区。当我通过Eclipse运行bundle时,我得到了解析javax.ws.rs包的错误。我已将javax.ws.rs-api 2.0.1添加到cnf项目中,并将javax.ws.rs-api-2.0.1.jar添加到我的bundle的构建路径中。
当我运行捆绑包时,我收到以下错误:
!无法解析捆绑包:[myprovider-1.0.0.201704280130 org.osgi.framework.BundleException:无法解析myprovider [1](R 1.0):缺少需求[myprovider [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package = javax.ws.rs)(版本> = 2.0.0)(!(版本> = 3.0.0)))未解决的要求:[[myprovider [1](R 1.0)] osgi.wiring.package; (及(osgi.wiring.package = javax.ws.rs)(版本> = 2.0.0)((版本>!= 3.0.0)))] ] !无法启动捆绑myprovider-1.0.0.201704280130,异常无法解析myprovider [1](R 1.0):缺少需求[myprovider [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package = javax.ws.rs)(版本> = 2.0.0)(!(版本> = 3.0.0)))未解决的要求:[[myprovider [1](R 1.0)] osgi.wiring.package; (及(osgi.wiring.package = javax.ws.rs)(版本> = 2.0.0)((版本>!= 3.0.0)))]
我的包的bnd.bnd是:
-buildpath: \
javax.ws.rs-api;version=2.0,\
osgi.cmpn,\
osgi.core
-runrequires: \
osgi.identity; filter:='(osgi.identity=org.apache.felix.gogo.command)',\
osgi.identity; filter:='(osgi.identity=org.apache.felix.gogo.runtime)',\
osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)'
-runfw: org.apache.felix.framework;version='[5.4.0,5.4.0]'
-runee: JavaSE-1.8
Export-Package: myprovider
我原本试图做的几乎和这个问题一样:
Error implementing a OSGI REST: `OSGi bundle not started : missing requirement`
但是,我已经在我的bnd文件中解决了该问题。
答案 0 :(得分:0)
您应该将bnd.bnd文件拆分为两个文件。
bnd.bnd定义构建单个包的规则。所以buildpath以及像Import-Packages这样的调整设置都属于那里。
app.bndrun或类似的。您至少需要在那里定义索引和运行需求。运行需求应包括您的用户包。
要使您的软件包至少解决,您还需要在索引中添加jaxrs api软件包。但这还不够。您还需要一个jaxrs实现,您还需要发布您的休息服务。有一些方法可以实现这一目标。其中一次是CXF-DOSGi。
使用bnd构建捆绑包有REST example。
还有an index和bndrun file。 bndrun还包括其余示例,即使它是在soap示例中。