5

とにかくJREに同梱されており、アプリケーションのクラスパスでオーバーライドできないため、JAXBをJavaアプリケーションの依存関係として宣言する必要があるのはなぜですか。

例としてjersey-jsonを使用すると、POMファイルで、正確なバージョンを指定せずにjaxb-implへの依存関係を宣言します。これを行うことで彼らは何を得ていますか?

また、自分のPOMファイルでjersey-jsonに依存関係を追加すると、クラスパスにjaxb-api.jarとjaxb-impl.jarが含まれることになります。なぜこれを実現したいのですか?承認されたライブラリディレクトリにファイルを配置しないと、デフォルトのJVM実装がロードされませんか?

4

2 に答える 2

1

リンクされたpomで見ています:

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
    </dependency>

しかし、親の pom もあるので、実際のバージョンやスコープがそこに指定されている (そして伝播されている) かどうかを確認するために、そのトレイルをたどることができます。

しかし、そうでない場合、Jersey チームは JAXB 2 API が十分に成熟しており、JAXB 実装への緩い依存関係を指定できるようになったと感じたのではないでしょうか。

JRE には JAXB impl の特定の実装が同梱されており、これは長い間 JAXB RI 2.1.7 と同等でした。しかし同時に、アプリ内で選択した別の実装に簡単に交換できるメカニズムがあります。

組み込みの JRE JAXB 実装を使用できることは確かです。それがアプリで機能する場合は、ぜひ試してみてください。

とはいえ、別の JAXB 実装が必要になる理由には次のようなものがあります。JAXB 2.2.x (より新しいバージョンの JRE に付属) などの新しい JAXB API が必要です。別の実装を完全に使用したい (特定の用途でより優れた API やパフォーマンスが得られるため) など...

jersey の質問に戻りますが、開発者が選択した JAXB impl を取り込める柔軟性を開発者に提供したかったのではないかと推測しています。ガイドのどこかにある程度の推奨事項があると思います。ただし、JAXB RI が明確に依存関係としてマークされているという事実は、議論を弱めます。

于 2012-06-27T16:24:37.860 に答える
0

ジャージーの人々が依存関係を間違って定義したように聞こえます。実行する環境によって依存関係が提供される場合は、スコープ「提供」で定義する必要があります。

于 2012-06-27T14:43:14.183 に答える