2017-02-13 122 views
0

我刚开始学习OSGi。 我写的HelloWorld包:OSGi:org.osgi.framework.BundleExceptiom:无法解析[16](R 16.0)

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菲利克斯(版本5.6.1 ): screen 当Im试图启动激活器时,我收到错误消息: screen

回答

1

没有名为HelloWorld的程序包供您的程序包导入。所以它没有解决。你有一个名为HelloWorld的班级,但是(1)我假设班级在你的班级中,并且(2)班级不是一个班级。

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

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

+0

其实如果你看他的第一个截图,有两个捆绑。一个包含HelloWorld,另一个包含激活器。不知道为什么这样做。 –

+0

谢谢,我一定会检查那些教程。 2个bundle需要,因为我想要一个bundle使用另一个bundle的方法。 – DnyashA