web-dev-qa-db-ja.com

jaxrs-api VS jsr311-api VS javax.ws.rs-api VS jersey-core VS jaxrs-ri

上記のそれぞれが正確に何を意味するのかについて、私はまだかなりググってみました。

これが私の理解です:

  • jaxrs-api:apiのみが含まれます。実装なし。しかし、それはJSR311とどう違うのですか?
  • jsr311-api:JSR311仕様要求です。つまり、ドキュメントであると想定されます。なぜそれは瓶なのですか?
  • javax.ws.rs-api:実装ですか?
  • jersey-core(/ jersey client):JSR311の実装です。

私は各jarをダウンロードし、逆コンパイルしてその中身を確認しようとしましたが、実装ではなく、すべてのjarでインターフェースしか見つけることができません。

Mavenシェードプラグインによって生成される重複する警告のコンテキストでこれらの質問に直面しています。除外するものとその理由を理解するには、上記を正しく理解する必要があります。

27
Gadam

まず質問に行きます

「JSR311仕様要求です。つまり、ドキュメントであるはずです。なぜjarなのですか?」

最後の(jersey-core)、それらのjarはすべて「仕様」jarです。 JAX-RS(および他の多くのJava)仕様は、実装者が指定された動作を実装する必要があるコントラクト(またはインターフェース)を定義します。

したがって、基本的に、仕様で指定されているすべてのクラスは、コントラクトとしてjarに含める必要があります。 jarファイルのエンドユーザーは、それらを契約に使用できます。しかし、実装はありません。アプリケーションを実行するには、実際の実装が必要ですが、完全なJAX-RS準拠のアプリケーションをコンパイルするには、仕様API jarで十分です。

たとえば、クラスパスにこれらの仕様API jarの1つがある場合、JAX-RSアプリケーション全体を作成してコンパイルできますが、それを実行するには、実際の実装がない場合は、デプロイする必要があります。その仕様バージョンの実際の実装があるサーバー(JBossやGlassfishな​​ど)


  • jaxrs-api-これは RESTeasy's 仕様のパッケージです。これは公式の仕様jarではありませんが、仕様の契約には準拠しています。 RESTeasyは、このjarを仕様行全体、つまり1.x-currentに使用します。 jarは内部を変更して、異なるJAX-RSバージョンに準拠しています。

  • jsr311-api-これはJAX-RS 1.x行の公式仕様jarです。

  • javax.ws.rs-api-これはJAX-RS 2.x行の公式仕様jarです。

  • jersey-core-これは、仕様の部分的な実装です。残りの実装は、他のジャージーjarファイルに含まれています。以前のバージョンのJerseyでは、実際にはJAX-RS仕様APIがこのjarにパッケージ化されていました。ジャージーが公式のスペックjarを使用し始めたのは、その後のことでした。

  • jaxrs-ri-これは、1つのjarにパッケージ化された完全なJersey 2.x実装です。 "ri"はリファレンス実装を意味します。これは、ジャージーとはJAX-RSリファレンス実装です。 Mavenのような依存関係マネージャーを使用していない場合は、Jerseyに付属する個別のjarをすべて使用する代わりに、この単一のjarを使用することをお勧めします。

その他のリソース

また、異なる実装は仕様に準拠していますが、各実装には独自の追加機能があります。詳細については、さまざまな実装のドキュメントを参照してください。最も人気のある3つの実装は JerseyRESTeasy 、および [〜#〜] cxf [〜#〜] です。

43
Paul Samsotha