2012-06-27 17 views
5

JAXBをJavaアプリケーションの依存関係として宣言したいのはなぜですか?なぜなら、これはJREに付属しており、アプリケーションのクラスパスでオーバーライドできないからです。依存関係としてJAXBを宣言します。どうして?

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

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

+0

ポンの情報などが見つかった場所を正確に入力できますか? – khmarbaise

+0

jersey-jsonのpomファイルへのリンクを追加しました。 – Muton

答えて

0

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

+1

しかし、rt.jar自体にバンドルされているので、この場合はなぜ "提供されて"いるのでしょうか? – Muton

+0

いいえ、あなたはそれをコンパイル依存として必要とします。しかし、あなたが本当に必要としているよりもJava 1.6を常に使用するのであれば、それは本当に必要ありません。 – khmarbaise

1

私はリンクポンポンで見ている:

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

しかし、そこに親ポンポンでもあるので、あなたが実際のバージョンおよび/または範囲を指定したかどうかを確認するために、その道のフォローアップすることがありますそこに(そして伝播して)。

JAXB 2 APIがJAXBの実装に緩やかな依存関係を指定するのに十分なほど成熟しているとJerseyチームが思っていました。

JREには、JAXB RI 2.1.7と最も同等なJAXB implの特定の実装が付属しています。しかし、同時に、あなたのアプリケーションであなたが選んだ別の実装を簡単に取り替える仕組みがあります。

確かに、組み込みのJRE JAXB実装を使用することができます。アプリで動作する場合は、必ず試してください。

しかし、別個のJAXB実装が必要な理由には、次のようなものがあります。残ったバグ(新しいリリースで解決)。 JAXB 2.2.xのようなもっと新しいJAXB APIが必要です(JREのより新しいバージョンにあります)。

あなたのジャージーの質問に戻って、私は再び彼らが望んでいたと推測しています。(あなたの特定の用途のために、より良いAPIやパフォーマンスを持っているため) JAXBインプリメンテーションの柔軟性を開発者に提供します。私はガイドのどこかで何らかのレベルのアドバイスをしていると思います。 しかし、JAXB RIが特に依存関係としてマークされているという事実は、議論の根底にあります。

+0

親では、スコープが定義されていないため、プロジェクトに依存することになります。 – khmarbaise

+1

説明をありがとうが、これはまだ完全に私のために明確にしていません。私の理解では、クラスパスに別のバージョンを追加することで、JREにバンドルされているバージョンを単純に上書きすることはできません。そのためには、承認された標準のオーバーライドメカニズム(http://docs.oracle.com/javase/7/docs/technotes)を使用する必要があります。 /ガイド/規格)。 ここで私は完全に間違っていますか? JerseyプロジェクトでJAXBの正確なバージョンは大きな違いがありますが、pomファイルでJAXBをどのように管理できるのか、それをコンパイル時の依存関係として定義する理由はわかりません。 – Muton

関連する問題