需要 OSGi 伴侣包吗?

OSGi companion bundle needed?

我在 Eclipse 中有两个基于 Bndtools 的不同项目。 第一个生成具有以下清单的 JAR:

Manifest-Version: 1.0
Bnd-LastModified: 1450251340248
Bundle-Activator: org.osgi.tutorial.MessageCounterActivator3
Bundle-ManifestVersion: 2
Bundle-Name: org.osgi.tutorial
Bundle-SymbolicName: org.osgi.tutorial
Bundle-Version: 0.0.0.201512160735
Created-By: 1.8.0_66 (Oracle Corporation)
Import-Package: org.osgi.book.reader.api,org.osgi.framework;version="[1.3,2)",org.osgi.util.tracker;version="[1.4,2)"
Private-Package: org.osgi.tutorial
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-3.0.0.201509101326

第二个具有以下清单:

Manifest-Version: 1.0
Bnd-LastModified: 1450536025075
Bundle-Activator: org.osgi.book.configadmin.ServerConnectionActivator
Bundle-ManifestVersion: 2
Bundle-Name: org.osgi.book.configadmin
Bundle-SymbolicName: org.osgi.book.configadmin
Bundle-Version: 0.0.0.201512191440
Created-By: 1.8.0_66 (Oracle Corporation)
Import-Package: org.osgi.framework;version="[1.3,2)",org.osgi.service.cm;version="[1.3,2)"
Private-Package: org.osgi.book.configadmin;version="1.0.0"
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-3.0.0.201509101326

这两个项目需要 osgi.cmpn:第一个用于 ServiceTracker(包 org.osgi.util.tracker),第二个用于 ManagedService(包 org.osgi.service.cm)。

第一个项目效果很好:我安装并启动了捆绑包,没有任何问题。 我可以从第二个项目安装包,但是当我启动它时,我收到以下错误:

org.osgi.framework.BundleException: Unresolved constraint in bundle org.osgi.book.configadmin [6]: Unable to resolve 6.0: missing requirement [6.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.service.cm)(version>=1.3.0)(!(version>=2.0.0)))

有什么问题吗?如果两个项目都需要 osgi.cmpn JAR ... 为什么第一个项目不会在启动时抛出此错误?

谢谢, 保罗.

参见 。切勿在 OSGi 中部署纲要 jar。相反,您需要一个实现您所依赖的规范的包。

在您的情况下,您需要一个配置管理服务实现。有来自 felix 和来自 eclipse 的实现。两者都包含 api.