java.lang.IncompatibleClassChangeError: Implementing class deploying to app engine

前端 未结 8 1046
迷失自我
迷失自我 2020-11-27 18:12

I wrote a couple of REST services using Jersey 1.13 on JRE 1.6. Everything runs fine locally, but after I deploy to GAE I get this error:

****Uncaught excep         


        
相关标签:
8条回答
  • 2020-11-27 18:30

    Did you update your App engine's SDK? (Recently the App engine SDK was updated from 1.7.0 to 1.7.1.)

    Try to revert your app engine's SDK to 1.7.0. I have tried many solutions that I found on the Internet, none of them worked for me, but this one worked.

    I have no idea how I can safely change my app engine project's sdk version for now. If anyone knows how to change the SDK version of the app, please let me know.

    0 讨论(0)
  • 2020-11-27 18:32

    Same problem here, but I believe I've fixed it!

    The trick was running a clean inside of eclipse, which notified me of the following error:

    java.lang.RuntimeException: Unexpected exception
        at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:76)
        at com.google.appengine.tools.enhancer.Enhance.<init>(Enhance.java:71)
        at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)
        ... 2 more
    Caused by: org.datanucleus.exceptions.NucleusUserException: You seem to have ASM v3 in the CLASSPATH and you need ASM v4
        at org.datanucleus.enhancer.DataNucleusEnhancer.<init>(DataNucleusEnhancer.java:173)
        at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1133)
        ... 7 more
    

    The important bit . . .

    Caused by: org.datanucleus.exceptions.NucleusUserException: You seem to have ASM v3 in the CLASSPATH and you need ASM v4

    Apparently, GAE does not like having two versions of ASM loaded. On a whim, I went into the eclipse project properties and changed the datanucleus version from v2 to v1. I redeployed and now my app works. So much for catching these kinds of issues in the local dev environment . . .

    I think I spent more time configuring GAE to run with jersey than I did actually writing the app. This may be my first and last GAE hosted app.

    0 讨论(0)
  • 2020-11-27 18:35

    The instructions on this post took care of my problem.

    Apparently the jersey-server 1.13 jar is compatible with asm3.1 and GAE 1.7.1 needs ASM 4. Using the Jar repackaging tool jarjar you can deploy a asm 3.1 jar that will play with asm 4.

    You may need to use JarJar version 1.3 if 1.4 gives an error message.

    0 讨论(0)
  • 2020-11-27 18:36

    The new Jersey version 1.18.1 doens't depend on Asm 3, so it's compatible with GAE!

    0 讨论(0)
  • 2020-11-27 18:36

    Maybe this will help: java.lang.IncompatibleClassChangeError: Implementing class Mongo

    It's not exactly the same class, but the problem occurs when you have a library with 2 different version jars. Make sure you did not include any extra libraries or (I'll explain what happened to me):

    You have A-1.0.jar and A-1.0.jar has inside another jar, let's say B-1.0.jar, but you have included separately a B-2.0.jar and in this way the two different version B jars are the problem.

    Make sure you did not make this.

    0 讨论(0)
  • 2020-11-27 18:38

    I changed the Persistence from JAP2 to JPA1 and it worked for me.

    0 讨论(0)
提交回复
热议问题