2017-02-13 16 views
0

ImはちょうどOSGiを学び始めました。 Apacheのフェリックス(版にそれをアップロードOSGi:org.osgi.framework.BundleExceptiom:解決できない[16](R 16.0)

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

5.6.1:

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 私はHelloWorldのバンドルを書きました。 ): screen そして、アクティベータを起動しようとすると、エラーメッセージが表示されます。 screen

答えて

1

バンドルをインポートするパッケージはありません。HelloWorldそれで解決しません。あなたはHelloWorldという名前のクラスを持っていますが、(1)クラスはあなたのバンドルにあると仮定します。(2)クラスはパッケージではありません。

マニフェストは、OSGiバンドルの有用なマニフェストではありません。 Main-Classは、OSGiフレームワークにとって無意味です。あなたのバンドルはとても簡単なので、BundleActivatorBundleContextの種類にアクセスするには、Import-Packageorg.osgi.frameworkパッケージが必要です。また、バンドルアクティベータがあるので、Bundle-Activatorヘッダーを使用してクラスの完全修飾名を指定する必要があります。

OSGi enRouteサイトでチュートリアルをチェックすることをおすすめします。

+0

実際に最初のスクリーンショットを見ると、2つのバンドルがあります。 HelloWorldを含むもの、アクティベータを含むものそれがなぜ行われたのか分かりません。 –

+0

ありがとう、私は確かにそれらのチュートリアルをチェックします。 2つのバンドルが必要なのは、あるバンドルで別のバンドルからメソッドを使用したいからです。 – DnyashA

関連する問題