我一直在尝试制作一个OSGI休息捆绑包。我将其烘烤到一个人为的最小化示例,其中一个捆绑工作空间带有一个使用一些注释的单个类。当我通过Eclipse运行捆绑包时,我会发现错误解决Javax.ws.rs软件包。我已将javax.ws.rs-api 2.0.1添加到CNF项目中,并将javax.ws.rs-api-2.0.1.jar添加到我捆绑包的构建路径中。
当我运行捆绑包时,我会收到以下错误:
!无法解析捆绑包:[MyProvider-1.0.0.201704280130 org.osgi.framework.bundleexception:无法解决MyProvider [1](R 1.0(:缺失要求[myProvider [myProvider [1](r 1.0((r 1.0(] osgi.wiring.package.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.0.0.201704280130,例外无法解析myProvider [1](r 1.0(:丢失要求[myProvider [1](r 1.0(] osgi.wiring.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
我最初想做的是与这个问题中的几乎相同:
实现OSGI休息的错误:`OSGI捆绑包没有开始:缺少要求
但是,该问题的解决方案是我在BND文件中已经存在的。
您应该将bnd.bnd文件分为两个文件。
-
bnd.bnd定义了构建单个捆绑包的规则。因此,buildpath以及像进口包一样的调谐设置属于那里。
-
app.bndrun或类似。您至少需要在那里定义索引和运行。RunRequires应包括您的用户捆绑包。
要使您的捆绑包至少解决,您还需要在索引中添加JAXRS API捆绑包。这还不够。您还需要JAXRS实施,还需要发布您的REST服务。有一些方法可以实现这一目标。一旦他们是cxf-dosgi。
有一个使用BND构建捆绑包的REST示例。
还有一个索引和一个BNDRUN文件。即使在肥皂示例中,BNDRUN也包括静止的示例。