问题嵌入式菲利克斯无法施展活化剂的BundleActivator
我有我的实例的OSGi bundle激活在菲利克斯OSGi容器中的一个问题。当我尝试启动捆绑包时,出现错误,我无法将激活码类型投射到org.osgi.framework.BundleActivator
,尽管事实上这是在项目中定义的父类。
我已将org.osgi:org.osgi.core:5.0.0
包含在激活的包中,以便激活器的类可以被启动。我是否需要引用OSGi包中的OSGi库或者Felix容器是否为我提供这些库?
无论是运行嵌入的Felix还是从命令行运行,我都有同样的问题。
** **解决方案
原来Felix的OSGi的版本比最新标准以上。由于我是OSGi的新手,我只是抓住所有最新的东西并开始开发。我已经从版本5.0.0迁移到4.3.0。我注意到唯一的区别是在API中缺乏很好的泛型。
现在我的类是兼容的,它们可以在容器中启动时解析。以前的问题只是由于库的版本。
背景
我有一个Maven构建了未启动的项目,因为它找不到依赖于org.osgi.framework(vesrion> = 1.7.0)(!(版本> = 2.0 .0))。
项目configuraiton是
Main
SubProjectApi
SubProjectImpl
SubProjectIntegrationTest
凡SubProjectImpl有依赖关系SubProjectApi。 SubProjectApi有一个使用maven-bundle-plugin构建的包,但不包含任何OSGi引用。 SubProjectImpl引用Api模块并提供一个BundleActivator。为了解决OSGi类,该项目依赖于org.osgi:org.osgi.core:5.0.0
。一切都很好。
SubProjectIntegrationTest项目提供了一组单元测试,以确保SubProjectImpl在嵌入式Felix环境中正常工作。我按照指南设置Felix
实例(创建Activators,引用所需的罐子等)。由于测试环境和OSGi都需要相同的API类,因此我使用org.osgi.framework.system.packages.extra配置选项来共享API类。
当测试开始下面的错误,制作
ERROR: Bundle dsto.lod.simr.core [12]
Error starting file:target/SubProjectImpl.jar
(org.osgi.framework.BundleException: Unresolved constraint in bundle
project.impl [12]: Unable to resolve 12.0:
missing requirement [12.0] osgi.wiring.package;
(&(osgi.wiring.package=org.osgi.framework)(version>=1.7.0)(!(version>=2.0.0))))
我以为菲利克斯环境会自动提供这些类。我将org.osgi.core模块添加到了环境中,问题变成了我使用的类型。
谢谢。我已经转向使用'org.apache.felix:org.apache.felix.main:4.0.3'来提供Maven构建中的OSGi组件,但不喜欢指定供应商特定的OSGi,但构建的确如此工作和组件在嵌入式Felix中启动。然后我改为'org.osgi:org.osgi.core:4.3.0',这也起作用了。激活的bundle现在不包含任何OSGi依赖项。 – Lance
为了强调一下,导入一个包和在你的包中嵌入一组类是有很大区别的。导入很好,但嵌入会导致类路径混乱。使用Maven Bundle插件并不总是清楚你做了什么,所以值得检查一下你的清单和bundle,看看它为你带来了什么。听起来像'包含'意味着你知道它嵌入了你的依赖关系,但它是一种模棱两可的词。 –
导入和嵌入有微妙的折衷。由于框架诊断出问题,导入更安全。由于您拥有更少的依赖关系,因此嵌入具有更易于使用的优势。 –