OSGi:org.osgi.framework.BundleExceptiom:无法解析[16](R 16.0)

时间:2017-02-13 17:33:18

标签: java osgi

我刚开始学习OSGi。 我写了 HelloWorld 包:

    public class HelloWorld {
    public interface SayHello
    {
        void greeting();
    }

    public static class Greeting implements SayHello {
        @Override
        public void greeting(){
            System.out.println("Hello OSGi world!");
        }
    }

    public static void main(String[] args) {

    }
}

HelloWorldActivator 捆绑:

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class HelloWorldActivator implements BundleActivator {
    public void start(BundleContext ctx){
        ServiceReference ref = ctx.getServiceReference(HelloWorld.Greeting.class.getName());
    ((HelloWorld.Greeting)ctx.getService(ref)).greeting();
    }
    public void stop(BundleContext ctx){
        System.out.println("HelloWorld bundle has been stoped");
    }
}

HelloWorldActivator.mf:

main-class: HelloWorldActivator
bundle-name: HelloWorldActivator
import-package: HelloWorld

将其上传到Apache Felix(版本5.6.1): screen 当我试图启动激活器时,我收到错误消息: screen

1 个答案:

答案 0 :(得分:1)

您的捆绑包中没有名为HelloWorld的包导入。所以它无法解决。你有一个名为HelloWorld的类但是(1)我假设类在你的包中,(2)一个类不是一个包。

您的清单不是OSGi包的有用清单。 Main-Class对OSGi框架毫无意义。您的捆绑包非常简单,只需Import-Packageorg.osgi.framework包即可访问BundleActivatorBundleContext类型。而且,由于您有一个bundle激活器,您需要使用Bundle-Activator标头指定该类的完全限定名称。

我建议您查看OSGi enRoute网站以获取教程。