我使用Apache Felix实现osgi bundle并将其用作嵌入式Felix框架来调用boundle
这是构建MANIFEST.MF的maven插件:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.5.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Bundle-Activator>a.b.c.osgi.activator.Activator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
我构建项目然后在嵌入式felix中使用jar文件,就像这样
BundleContext bundleContext = f.getBundleContext();
Bundle bundle = bundleContext.installBundle(
"file:/home/eclipse_workSpace/my-module/target/abc-1.1.0.jar");)
String bName = bundle.getLocation();
bundle.getRegisteredServices();
bundle.getState();
/* Bundle[] bls = bundleContext.getBundles(); */
System.out.println("starting bundle " + bName);
bundle.start();
当我开始绑定时,我得到了这个异常
线程中的异常&#34; main&#34; org.osgi.framework.BundleException:无法解析a.b.c [1](R 1.0):缺少需求[a.b.c [1](R 1.0)] osgi.wiring.package; (&amp;(osgi.wiring.package = com.google.common.base)(版本&gt; = 21.0.0)(!(版本&gt; = 22.0.0)))未解决的要求:[[abc [1](R 1.0) )] osgi.wiring.package; (及(osgi.wiring.package = com.google.common.base)(版本&GT; = 21.0.0)((版本&GT;!= 22.0.0)))]
我该怎么做才能解决这个问题?
答案 0 :(得分:3)
此错误消息表示您的捆绑包依赖于Google Guava版本21.特别是此行:
missing requirement [a.b.c [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=com.google.common.base)(version>=21.0.0)(!(version>=22.0.0)))
...表示您的软件包“abc”导入的软件包com.google.common.base
的版本大于或等于21且不大于或等于22.因为您的软件包导入了此包中,OSGi Framework中必须有另一个包导出包。
解决方案是确保将Guava 21安装到您的OSGi Framework中。