兼容性问题ASM 3.1和HIbernate和JAX-RS

8 assembly hibernate jax-rs jersey

我发现"Hibernate不能与JAX-RS的参考实现相结合." 链接http://lists.jboss.org/pipermail/hibernate-issues/2009-May/015628.html

所以我无法将JAX-RS(泽西)和hibernate结合起来,有人知道这方面的解决方法吗?

Fox*_*BOA 13

邪恶的根源是cglib.将cglib-2.1.3.jar替换为cglib-nodep-2.1_3.jar并删除hibernate的asm*.jar文件.


vlc*_*mi3 5

Jersey(Java REST框架)与Hibernate结合使用需要对Maven的pom.xml文件进行一些调整.问题是Hibernate使用的ASM 1.5.3是与JerseyASM 3.1使用的不兼容的.

你需要做的是从Hibernate中排除一些传递依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate</artifactId>
    <version>3.2.6.ga</version>
    <exclusions>
        <exclusion>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
        </exclusion>
        <exclusion>
            <groupId>asm</groupId>
            <artifactId>asm-attrs</artifactId>
        </exclusion>
        <exclusion>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
        </exclusion>
    </exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后,您需要包含正确版本的ASM:

<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

最后,您需要包含一个CGLib的nodep版本,它从ASM版本1.5.3重新打包类:

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib-nodep</artifactId>
    <version>2.1_3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

来源:http://blog.idm.fr/2009/04/jersey-hibernate-conflict.html


Cha*_*ick 3

升级到 Hibernate 3.3.2 或更高版本。

如果您点击生成该消息的错误报告的链接,则表明最新版本的 Hibernate(自 3.3.2 起)使用不同的字节码操作包(Javassist),这消除了导致问题的 ASM 冲突。