felix maven-bundle-plugin错误(&(osgi.wiring.package = com.a.b.c)(版本> = xx.0.0)(!(版本> = yy.0.0)

时间:2018-02-06 18:37:09

标签: osgi apache-felix maven-bundle-plugin

我使用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)))]

我该怎么做才能解决这个问题?

1 个答案:

答案 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中。