4

FuseESB (apache serviceMix に基づく) で Jersey サーブレットをデプロイしようとしていますが、次のエラーが発生します。

Error executing command: Unable to resolve module com.temp.myappserver [248.4] because it is exposed to package 'javax.ws.rs' from org.apache.servicemix.specs.jsr311-api-1.1 [139.0] and com.sun.jersey.jersey-core [274.0] via two dependency chains.

Chain 1:
  com.temp.myappserver [248.4]
    import: (&(package=javax.ws.rs)(version>=1.1.0)(!(version>=2.0.0)))
     |
    export: package=javax.ws.rs
  org.apache.servicemix.specs.jsr311-api-1.1 [139.0]

Chain 2:
  com.temp.myappserver [248.4]
    import: (package=com.sun.jersey.spi.container.servlet)
     |
    export: package=com.sun.jersey.spi.container.servlet; uses:=com.sun.jersey.server.impl.application
  com.sun.jersey.jersey-servlet [267.0]
    import: (package=com.sun.jersey.server.impl.application)
     |
    export: package=com.sun.jersey.server.impl.application; uses:=javax.ws.rs
  com.sun.jersey.jersey-server [265.0]
    import: (package=javax.ws.rs)
     |
    export: package=javax.ws.rs
  com.sun.jersey.jersey-core [274.0]

このエラーが発生する理由はわかっています。実際、jersey-core jar マニフェストは javax.ws.rs をエクスポートし、serviceMix は独自の実装に依存しています。それを解決する方法はありますか、それともサービスを CXF に変換する必要がありますか?

4

1 に答える 1

2

問題を正しく分析しました: Felix はこの状況を解決できません。パッケージを提供する 2 つのバンドルがあり、それをcom.sun.jersey.jersey-coreインポートせず (インポートする必要があります)、独自のバンドルが特定のバージョンをインポートしようとしているためです。提供しcom.sun.jersey.jersey-coreます (そのバンドルはバージョン ステートメントを提供しないため、デフォルトで に設定される0.0.0ため、要件に一致しません)。

それで、あなたは何ができますか?

  • 最良の解決策はjersey-core、フレームワークの残りの部分に独自のバージョンを課すのではなく、バンドルが正しいインポートを提供することです。
  • jersey-coreこれには時間がかかる場合があるため、独自のインポートにバージョン ステートメントをドロップして、フレームワークがバンドルではなくバンドルに接続する機会を与えることができますservicemix。理想的な状況ではないことは承知していますが、私たちにできる最善のことのようです。

uses 制約に関する一般的な注意事項として、Neil Bartlett の 'uses' に関する投稿を参照してください。

于 2012-02-15T10:49:25.423 に答える