2016-05-17 23 views
1

私は現在、hibernate-4.1.4とjersey-2.22を使用しています。これらにはそれぞれjavassist-3.15とjavassist-3.18があります。HibernateとJerseyの依存関係の競合(javassist) - 誰でもこの仕組みを説明できますか?

私のプロジェクトには休止状態とジャージーの両方が含まれていましたが、私の驚いたことに、このジャンパーの間には依存関係がありませんでした。

私は、Javaがどのようにhibernateに3.15の使用を指示しているのか、両方ともビルドパスにあるので、ジャージーに3.18を使用するように指示する方法を知りました。 1人のjavassistは使用されていませんか?

今後の質問:javassist-3.15とjavassist-3.18が互いに競合しているとします。これをどうやって解決するのですか?ジャバシストの両方を無効にし、外部に1つを含めますか?

編集:私のアプリはTomcat 7で動作するウェブアプリです.Maven/Gradleは使用しません。 Eclipseを使用してビルドパスにjarファイルを置くだけで、依存関係を設定します。

+0

...私は、最新のライブラリ(大きいバージョンとの1)を選択する傾向があるが、この方式は、常に動作しません? Maven? –

+0

いいえ、私はMavenを使用していません。私たちは、Eclipseビルド・パスへのjarファイルだけを含めています。プロジェクト - >プロパティ - >ビルドパス - >外部ジャーナルの追加を右クリックします。私はそれが奇妙だと知っていますが、それはそれがどのようなのです – mpmp

+0

あなたのアプリケーションはスタンドアロンのJavaアプリケーションですか?? o特別なコンテナ(Tomcat、JBossなど)で動作するエンタープライズアプリケーション(WEB、EJB、...)です。 –

答えて

2

JAVAはクラスローダーを介してクラスをロードします... TomcatやWildflyなどの多くのアプリケーションサーバーは、独自のクラスローダー(一般的なJDKの正規のもの)を実装して使用します。そのクラスローディングの振る舞いについて...

Tomcatがライブラリをアルファベット順にロードしている可能性が非常に高いです。 Dummyを、このクラスは図書館で含まれています:私は

は、あなたが名前のクラスを使用するとし...説明dummy-1.0.jardummy-1.1.jar ...クラスDummyが要求され、そのクラス定義のためのTomcatのクラスローダの検索、 dummy-1.0.jar以降でdummy-1.1.jarを探しています... dummy-1.0.jarにそのクラスが含まれていれば、Tomcatはそのクラスのバージョンを返すことをやめます... dummy-1.0.jarに対象クラスがない場合は、代わりにdummy-1.1.jarクラスのバージョンが返されます...

(これを試して、コンテナを検証することをお勧めします。実装するのは難しくありません。 )...

そして、はい、お互いにjavassist-3.15javassist-3.18紛争あれば、あなたはそれらを削除し、両方のライブラリ(ジャージのためのより
適しJavassistのJARファイルを選択し、休止すべきです)。

親指のルールとして、あなたのプロジェクトにこれらのライブラリをインポートするために使用している何

+0

javassist-3.15とjavassist-3.18が競合する場合は、それらを削除し、javacist JARをもっと選択してください。 両方のライブラリ(ジャージとハイバネーション)に適しています。 特定のバージョンのjavassistがHibernateとJerseyの両方に適しているかどうかはどのように分かりますか?その情報はどこで見つけられますか? あなたが私の立場にあり、ジャバシストの瓶が紛争していたら、どうしますか? – mpmp

+1

まず、関連するプロジェクトサイトにこのような情報があるかどうかを確認しようとします。そうでなければ、私は彼らのそれぞれのメーリングリストで尋ねることを試みるでしょう... また、私は1つのjavaassistを選び、私のアプリケーションを完全に(完全なregresion)をテストしようとします...エラーまたは例外(休止/ javaassistまたはジャージ/ javaassist)が発生した場合、そのバージョンライブラリは勝者のライブラリになるための良い候補です... –

+2

javassist jarsに競合があった場合は、次のオプションを調べます:1つは、同じjavaasistを使用して、最小限の変更で自分のコードを実行することができます。 2つ、ジャージーが必要な理由を確認し、一緒に休止する、ジャージを使用するクラスと休止状態を使用するクラスを分離し、それらをサービスとして公開できますか? 3つは、分離されたクラスローダーを使用して、どのように私が休止状態とジャージーを呼び出すことができるかを見てください(これは非常に難しいですが、この種の問題を解決するプロジェクトがあります。例:JBoss Modules) –

関連する問題