1

在我的项目中,我同时使用 Hibernate 和 Jersey

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

Jersey 使用 ASM 库,Hibernate 也使用该库,但版本不同。Hibernate 使用 1.5.3 版本,Jersey 使用 3.5.1。很大的不同!我们不能只是删除旧版本并把新版本放在那里,因为它们在架构上是不同的。版本 1.5.3 有一个“attrs”包,而 3.5.1 没有它,而是一个“签名”包。cglib 包需要 ASM 包,它是 Hibernate 库的一部分。如果我们删除该包,Jersey 将正常工作,但 Hibernate 将停止工作。要解决此冲突,请使用 cglib-nodep.jar 而不是 cglib.jar,并将 ASM 版本 3.x 与 Jersey 保持一致。cglib-nodep.jar 包含 cglib.jar 所需的一些 ASM 类,更改包名以避免任何类冲突。

但是在包括asm-3.1.jar, asm-attrs-2.2.3.jar, asm-commons-3.1.jar,之后asm-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=javassist到命令行或 JAVA_OPTS 中以进行 JBoss 配置。

您可以在此处和网络上的其他地方看到更多讨论。只是谷歌hibernate.bytecode.provider

于 2012-07-18T15:06:06.583 回答