需要OSGi伴包吗?

需要OSGi伴包吗?,osgi,osgi-bundle,bnd,bndtools,Osgi,Osgi Bundle,Bnd,Bndtools,我在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

我在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
第二个具有以下清单:

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(package org.osgi.util.tracker),第二个用于ManagedService(package 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。相反,您需要一个实现您所依赖的规范的包


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

我解决了在Bndtools(Eclipse插件)的运行描述符中添加osgi.cmpn作为运行需求的错误。然而,我不明白为什么在第一个项目中不需要它,在这个项目中,ServiceTracker使用了相同的osgi概要包。。。我错过了配置管理服务impl。现在删除概要包,效果很好:-)