0

この質問は投稿された質問と似ていますが、少し異なります。

Google guavaを使用しましたが、Mavenをインストールすると、次のエラーが発生します

Error executing command: Could not start bundle mvn:com.mycompany.webservices/dto/1.0.0 in feature(s) WebServicesGateway-0.0.0: Unresolved constraint in bundle 
com.mycompany.webservices.dto [224]: Unable to resolve 224.0: missing requirement [224.0] osgi.wiring.package; (&(osgi.wiring.package=com.google.common.base)(version>=13.0.0)(!(version>=14.0.0
)))

pom.xmlで以下をマークしている場合、Mavenインストールは正常に機能します。

<Import-Package>!com.google.common.base,

ただし、これにより、実行時にclassDEFNotFound例外が発生します。

java.lang.NoClassDefFoundError: com/google/common/base/Objects

バージョン番号を制限するために、バージョンをインポートに入れてみました

<Import-Package>com.google.common.base;version="[13.0,13.0]", 

12.0、11.0、10.0に制限しようとしましたが、エラーは同じままです。

maven .m2リポジトリを確認したところ、jarファイルは良好に見えます。

助言がありますか ?

4

1 に答える 1

3

guava ライブラリを osgi 環境に配置する必要があります。これにより、バンドルに必要なパッケージがエクスポートされます。guava-jar の現在のバージョン (13) は osgi 対応です。その jar を karaf の deploy フォルダーにドロップするだけで問題ありません。

ソリューションの試用版について: ほとんどの場合、pom でプロパティを手動で設定する必要はありませんImport-Package。maven バンドル プラグインによって解決されます。バンドルのマニフェストにImport-Package のようなものcom.google.guavaが表示される場合、それはバンドルでそのパッケージを実際に使用していることを意味します。そのため、手動で除外しても問題は解決しません。実際、OSGi はClassNotFoundException、バンドルを開始する前にインポートを解決することを要求することで、ユーザーを保護しようとします。インポート パッケージ プロパティを設定することで、その保護メカニズムを利用しました。

于 2012-11-30T09:46:41.660 に答える