12

私はJavaのいくつかの概念に頭を悩ませようとしています:

  1. JSR: 仕様を記述しますが、実際の実装はありません。たとえば、http: //jsr311.java.net/は「Java™ API for RESTful Web Services」の「ホーム」です。これは、JSR-311 のすべての実装に共通のリファレンスとして機能します。
  2. http://mvnrepository.com/artifact/javax.ws.rs/jsr311-apiから JSR-311 のインターフェース (?) をダウンロードできますが、自分で JSR-311 を実装しない限り、これらには特に価値はありません。
  3. JSR には、通常/常に参照実装があります。それを見つけるには、「JSR XXX リファレンス実装」をグーグルで検索するか、仕様のホームページ (例: http://jsr311.java.net/ )を参照する必要があります。
  4. JSR-311 の場合、この参照実装はJerseyです。Maven を使用すると、http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9からジャージー サーバーを取得できます。Jersey はhttp://mvnrepository.com/artifact/javax.ws.rs/jsr311-apiにあるインターフェースに従って実装を提供するため、jsr311-api 自体ではなく、Jersey をプロジェクトに依存関係として追加するだけで済みます。 . (これはすべての JSR テクノロジに適用されますか?)
  5. プロジェクトの依存関係としてhttp://mvnrepository.com/artifact/javax.ws.rs/jsr311-apihttp://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9の両方を配置すると、おそらくクラスパスの問題を引き起こしますか?

私は完全にオフですか、それとも何かに取り組んでいますか?

4

2 に答える 2

9
  1. はい、これは何も新しいことではありません。JDBC について考えてみてください。Java はインターフェイス ( Connection、など) を提供しますがStatementResultSet実装を提供するのはデータベース ベンダー次第です。

  2. Jersey や Apache CXF などの JSR-311 実装を使用している場合は、クラスに 、 などの注釈を付けます。これjavax.ws.rsが、JSR-311 を Maven 依存関係として明示的に持つ必要がある理由です。@Path@GET@Produces

  3. はい、通常。wiki の JSR リストを見てください。

  4. JSR と実装の両方が必要です。注釈は JSR にあり、実装は などのサポート クラスを提供しますcom.sun.jersey.spi.container.servlet.ServletContainer

  5. いいえ、両方を依存関係として持つ必要があります (ポイント 4 を参照)。クラスパスの競合は発生しません。

于 2011-12-12T15:56:47.317 に答える
3
  1. —</li>
  2. さまざまなソースからファイルをダウンロードできます。JSR-311仕様の最新バージョンを入手するには、 JCP ダウンロード ページにアクセスしてください。JCP ページから JAR ファイル (すべてのインターフェースなどを含む) を取得できない可能性は十分にありますが、それでも、これは公式のソースです。(公開ドラフトの素晴らしい PDF も常にあります!)
  3. —</li>
  4. その通りです。Jerseyには JSR-311 で定義された API が含まれているため、コンパイル依存関係をjsr311-api JAR ファイルに追加し、Jersey をランタイム依存関係として追加します。これにより、API と実装が適切に分離され、JSR-311 実装をいつでも交換できます [ sic ]。ずっとJersey を使用する場合は、Jersey のみを含めてください。POM の依存関係が 1 つ減ります。
  5. Jersey が jsr311-api JAR に含まれているものと同じ API をパッケージ化する場合、そうではありません。それが何か違うものをパッケージ化すると、まあ、それはひどいでしょう! クラスパスに破損した JSR-311 APIがある場合、Maven はおそらくコンパイル時に吠えます(私はすでに多くのjava.lang.ClassFormatError: Absent Code attribute in method that ...エラーを見たので、うまくいきません気付かれない、それは確かです)。

これら以外は、あなたは正しいです。

于 2011-12-12T15:59:50.820 に答える