2017-03-11 14 views
0

私はapache felixとosgiでいくつかの例を試しています。私はサービス(サービスプロバイダ)インターフェイスを作って実装しました。その後、マニフェストファイルを通じて提供される関連情報を含むjarファイルを作成します。次に、消費者用のjarファイルを作成する必要があります。しかし、これまでコンシューマ部分をコンパイルしようとすると、エラーが発生しますパッケージは存在しません。インターフェイスをコンシューマ(サービスコンシューマ)にインポートする必要があります。パッケージはApache Felixに存在しませんOSGI

これは私のコード(サービス消費者のActivator.java)

package mtitassignmentone.serviceconsumer; 

import java.util.Scanner; 
import java.util.StringTokenizer; 

import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 
import org.osgi.util.tracker.ServiceTracker; 

**import mtitassignmentone.serviceprovider.service.BookService;** 

public class Activator implements BundleActivator { 
    private BundleContext m_context = null; 
    private ServiceTracker m_tracker = null; 

    public void start(BundleContext context) throws Exception { 
     m_context = context; 

     // Create a service tracker to monitor dictionary services. 
     m_tracker = new ServiceTracker(m_context, m_context.createFilter(BookService.class.getName()), null); 
     m_tracker.open(); 

     BookService book= (BookService) m_tracker.getService(); 
      book.getName(); 

    } 

    public void stop(BundleContext context) { 
    } 
} 

輸入mtitassignmentone.serviceprovider.service.BookServiceです。コンパイル時にスローするエラーです。そのファイルが存在します。これを克服する方法は?

答えて

2

Activator.javaファイルには、パッケージのインポートに問題があるようです。場合によっては、サービスプロバイダの作成に使用するマニフェストファイルの最後にブランク行を保存しないと発生します。

もう1つの理由は、あなたが作成したパッケージ(明らかに:D)の問題です。この問題は、eclipseのようなIDEからパッケージを作成することで解決できます。さもなければ、あなたは例えばのためにCMDからそれを行うことができます:プロジェクトのルートディレクトリから

javac src/com/osgi/services/*.java 

を実行するには、他の依存関係を想定していない:

java -cp ./src com.osgi.services.MyService 

を(MyServiceでは、通常のメインを持っていると仮定すると、関数)。

javacコマンドは、パッケージのディレクトリにあるすべての.javaファイルをコンパイルします。彼らはすべて同じパッケージ/ディレクトリに入っているので、これはうまくいきます。生成された.classファイルは、同じディレクトリに置かれます。これは、必要な場合とそうでない場合があります。

別のディレクトリに配置するには、-dオプションを使用してパスを指定します。私は今、その作業をパッケージを作成するためにEclipseを使用

java -cp ./bin com.osgi.services.MyService 
+1

感謝を:次に実行するために

javac -d bin src/com/osgi/services/*.java 

関連する問題