1

私のプロジェクトでは、Hibernate と Jersey の両方を使用しています。以下のリンクから、Hibernate、Jersey とライブラリの競合があります。

http://www.hildeberto.com/2008/05/hibernate-and-jersey-conflict-on.html

Jersey は、Hibernate でも使用される ASM ライブラリを使用しますが、バージョンは異なります。Hibernate はバージョン 1.5.3 を使用し、Jersey は 3.5.1 を使用します。大きな違い!アーキテクチャが異なるため、古いバージョンを削除して新しいバージョンをそこに置くことはできません。バージョン 1.5.3 には「attrs」パッケージがありますが、3.5.1 には「署名」パッケージはありません。ASM パッケージは、Hibernate ライブラリの一部である cglib パッケージに必要です。そのパッケージを削除すると、Jersey は正しく動作しますが、Hibernate は動作しなくなります。この競合を解決するには、cglib.jar の代わりに cglib-nodep.jar を使用し、Jersey で ASM バージョン 3.x を保持します。cglib-nodep.jar には、cglib.jar が必要とするいくつかの ASM クラスが含まれており、クラスの競合を避けるためにパッケージ名を変更しています。

しかし、、、、を含めた後、エラーがasm-3.1.jar発生します:asm-attrs-2.2.3.jarasm-commons-3.1.jarasm-util-3.1.jarcglib-nodep-2.1_3sources.jar

私が配置した場合cglib 2.1.3

java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
    at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)
    at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)

私が配置した場合cglib-nodep-2.1_3-sources.jar

java.lang.ClassNotFoundException: net.sf.cglib.core.KeyFactory
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)

この問題を解決するために必要な jar ファイルをリストしてください。

4

1 に答える 1

2

私が間違っていなければ、cglib はもはや Hibernate の推奨バイトコード プロバイダーではありません。むしろJavassistであり、次のようにしてJavassistを強制できます。

hibernate.bytecode.provider=javassist

最近のバージョンの Hibernate では、これがすでにデフォルトの動作になっています。古いバージョンの Hibernate を持っているか、cglib で上記をオーバーライドするようにプロジェクトが既に構成されている必要があります。そのため、Hibernate のバージョンを更新するか、代わりに javassist を使用するようにインスタンスを構成できます。構成の種類は、環境と必要なものによって異なります。通常、クラスパスの hibernate.properties ファイルに上記の行を含めます。-Dhibernate.bytecode.provider=javassistJBoss 設定用にコマンド ラインまたは JAVA_OPTS に追加することもできると思います。

ここや Web の他の場所で、より多くの議論を見ることができます。Google hibernate.bytecode.provider のみ

于 2012-07-18T15:06:06.583 に答える