2012-04-18 14 views
3

私はorg.apache.httpパッケージを必要とするosgiバンドルを開発しています。ターゲットプラットフォームには、これらのパッケージを持つhttpcommponentsバンドルがあります。これは、バンドルのマニフェストでこれらの依存関係を宣言したときに見たことがあるためで、Eclipse依存プラグインの自動的にバンドルを追加したためです。問題は、私がimport org.apache.httpのときにコンパイルエラーが発生することです。私がバンドルを探索すると、org.apache.httpパッケージにアクチベータがあり、libフォルダに必要なパッケージが入ったjarファイルがあります。どうすればこれらのパッケージにアクセスできますか?アクティベータを起動し、実行時に必要なクラスを取得しますか?解決方法は、手動でorg.apache.http jarをバンドルのビルドパスに追加することです。申し訳ありませんが、それは...osgiバンドルのlib jarにアクセス

おかげ

答えて

1

あなたのビルドの問題に関してはthis questionを見てください。あなたの目標プラットフォームを構築した人は、あなたの悲しみの原因となっている間違ったアプローチを取っています。

ターゲットプラットフォームで実際にOSGi versions of the commons librariesを使用する必要があります。 OSGi対応版が入手できない場合は、Springsource bundle repositoryから入手できます。

これが可能でない場合(この問題を修正するため)、ビルドのクラスパスを適切なライブラリに変更するだけで済みます。これは、ランタイムに関係なく、すでに動作するはずです。

PS - それはエラーとして強調されて、私は私のクラスでdependecyリストではなく、インポートコード内のパッケージを参照してくださいので、それは少し混乱して愚かな質問;-)

+0

有用な情報をありがとう。結局、私はorg.apache.httpパッケージを必要とする使用する必要があるライブラリの完全なjarを見つけました。 jarには、ライブラリに必要なすべての依存関係が含まれているので、私はプロジェクトにそれを含めました。 –

0

愚かな質問だ場合は、基本的に、あなたのバンドルを起動しようとすると、あなたのOSGiコンテナがorg.apache.httpバンドルを実行していることを確認する必要があります。これを行うにはいくつかの方法があります。 jarをdeployディレクトリに手動でコピーするか、OSGi Bundle Repository (OBR)のようなものを使用できます。 OBRでは、バンドルをインストールすると、そのバンドルのすべてがダウンロードされ、インストールされます。

maven OSGi pluginを使用して独自のOBRをホストすることができます。これによりバンドルのマニフェストファイルが読み込まれ、その情報を持つローカルOBRが作成されます。その後、コンソールからOBRを使用してバンドルをインストールし、すべての依存関係をインストールすることができます。

+0

ではありません。上記のようにバンドルが含まれているのは、バンドルを開始したときに実行されているため、それをチェックしています。コードにはエラーがあっても実行されますが、エラーのある行(インポート行ではない)を実行しようとすると、NoClassDefExceptionがスローされます。 –

関連する問題