我已经解决了我在尝试使用NetBeans 8.2中的Maven OSGi Bundle项目模板构建具有依赖关系的OSGi包时遇到的问题。我将Apache Felix集成为OSGi运行时容器。
我上传了一个包含2个Maven OSGi捆绑项目的ZIP file: FirstModule 和 SecondModule 。后者依赖前者。这两个项目都在NetBeans IDE内部编译,我可以毫无问题地运行 FirstModule 项目 - 它在控制台中输出所需的消息。
但是,当我尝试运行 SecondModule 项目时,出现此错误:
主:
[propertyfile]更新属性文件: C:\源\的OSGi \ SecondModule \目标\ run.properties
[java] org.osgi.framework.BundleException:bundle com.slade.osgi.SecondModule [3]中未解决的约束:无法解析3.0: 缺少要求[3.0] osgi.wiring.package; (及(osgi.wiring.package = com.slade.osgi.firstmodule)(版本> = 1.0.0)((版本>!= 2.0.0)))
[java] org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)
[java] org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
[java] org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
[java] org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
[java] java.lang.Thread.run(Thread.java:748)
我已经突出显示了指示问题的消息部分。通过阅读StackOverflow以及互联网上其他地方的答案,我逐渐明白问题是 FirstModule 捆绑包尚未安装并在Felix OSGi容器中启动时选择 SecondModule 来运行。我已通过手动将两个捆绑包安装到Karaf实例中来确认此问题。当Karaf中未安装 FirstModule 捆绑包时, SecondModule 捆绑包会抛出该错误。当在Karaf中安装 FirstModule 捆绑包时, SecondModule 捆绑包按预期工作(仅在Karaf内部)。
因此,这让我相信我需要以某种方式在运行时将此依赖项安装到Felix中。但是,我不知道该怎么做。我希望如果将依赖项设置为“已提供”或“运行时”,Felix将在本地Maven存储库中查找已在构建/运行时安装 FirstModule 并自动解决依赖关系。但事实并非如此。
任何人都可以提供任何进一步的解释或可能的解决方案吗?
提前致谢!