1

OSGI バンドルで外部ライブラリを使用する方法は 2 つあります。私のパッケージだけがlib(例:google-gson)を必要とするので、(manifest.mf)に入れようとしましたBundle-ClassPath。しかし、Knopflerfish でバンドルを実行するたびに、Exception in thread "Thread-74" [stderr] java.lang.NoClassDefFoundError: com/google/gson/Gson.

私は OSGI を初めて使用するので、ここbuild.xmlからバンドルを作成するための指示に従って、lib も含めた for コンパイルを使用しようとしました (これが正しいかどうかはわかりません)。したがって、ライブラリは、プロジェクト クラスパスバンドル クラスパス(manifest.mf)、およびbuild.xmlの 3 つの異なる場所に表示されます。

誰かがライブラリを機能させる方法のヒントを教えてくれたらうれしいです。前もって感謝します!

4

2 に答える 2

1

プロセスは次のとおりです

1.すべての.jarファイルとその依存関係をフォルダーにコピーします

2. に記載しBUNDLE-CLASSPATHMANIFEST.MFください。これを参照してください

3.このライブラリのパッケージExport-packageを要素に追加MANIFEST.MFして、他のバンドルから見えるようにすることが重要です。

これで問題が解決することを願っています

于 2013-02-26T09:12:48.457 に答える
0

私に役立ち、うまくいくかもしれないいくつかのヒント:

  • バンドルの MANIFEST.MF に のような行がある場合がありImport-Package: org.osgi.frameworkます。その行で、ライブラリから目的のパッケージのインポートを追加する必要があるため、残りますImport-Package: org.osgi.framework, com.google.gson
  • TheWhiteRabbit が答えで言ったように、ライブラリには のようなエクスポート行が必要なExport-Package: its.sec.api.serviceので、他のバンドルがそれを見るかもしれません。通常、既にコンパイルおよびパッケージ化されているライブラリは既にセットアップされていますが、そうでないものもいくつか見つかりましたので、チェックすることをお勧めします。

また、外部ライブラリがバンドルであるかのようにフレームワークにインストールされる場合があることも覚えておいてください。つまり、 init.xargs - install jars/myLib/myLibrary.jar Installed but not startedです。

お役に立てれば

于 2016-08-25T10:11:26.453 に答える