2017-02-13 35 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