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

OSGi: org.osgi.framework.BundleExceptiom: Unable to resolve [16](R 16.0)

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

    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

没有名为 HelloWorld 的包供您导入。所以无法解决。您有一个名为 HelloWorld 的 class,但 (1) 我假设 class 在您的包中,并且 (2) class 不是一个包。

您的清单不是 OSGi 包的有用清单。 Main-Class 对 OSGi 框架没有意义。您的包非常简单,只需要 Import-Package org.osgi.framework 包就可以访问 BundleActivatorBundleContext 类型。而且,由于您有捆绑激活器,因此需要使用 Bundle-Activator header.

指定 class 的完全限定名称

我建议查看 OSGi enRoute 网站的教程。