1


サンプル ジャージー ウォー バンドル コード (git 上の helloworld-osgi-webapp: https://github.com/jersey/jersey-1.x/tree/master/jersey/samples/helloworld-osgi-webapp )をデプロイしようとすると、 Glassfish 3.1.2.2 では、次の osgi エラーが発生します。

remote failure: Error occurred during deployment: Exception while loading the app: 
  org.osgi.framework.BundleException: Unresolved constraint in bundle war-bundle [344]:
  Unable to resolve 344.0: missing requirement [344.0] osgi.wiring.package; (&(osgi.wiring.package=com.sun.jersey.api.core)(version>=1.18.0)(!(version>=2.0.0))).
  Please see server.log for more details.
  Command deploy failed

maven felix プラグインが戦争にライブラリを埋め込まないのはなぜですか?
よろしくお願いします、M.

4

1 に答える 1

2

直接的な理由は、アプリケーションではそれを行うように構成されていないことです。そうでない理由は、OSGiの世界ではそうすべきではないということです。

提供された範囲内にあるpomから:

<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
<classifier>cobertura</classifier>

また、ランタイムスコープとコンパイル済みスコープのみが埋め込まれます。

<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>

OSGi標準のインポートパッケージを使用して、サーブレットとサーブレットの依存関係をOSGiサービスとしてインポートします。

<Import-Package>com.sun.jersey.api.core,com.sun.jersey.spi.container.servlet,*</Import-Package>

OSGiの世界では、依存関係は個別のOSGiバンドルとしてデプロイする必要があり、戦争に組み込まれるべきではありません。それがあなたの例がしていることです。したがって、ジャージを別個のOSGiバンドルとしてデプロイする必要があります。

于 2013-02-18T16:51:38.723 に答える