java.lang.ClassFormatError:クラスファイル内でネイティブでも抽象的でもないメソッドのコード属性が存在しない…​

java.lang.ClassFormatError : Absent Code attribute in method that is not native or abstract in class file …

問題

非常に奇妙でまれな問題が、JPAまたはHibernateの開発で発生しました。

Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is
        not native or abstract in class file javax/persistence/GenerationType

    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknow

溶液

これは常にJava.netにあるjavaee.jarによって引き起こされます。 多くの開発者は、次のMaven座標でjavaee.jarを取得することを好みます。

  
    
        Java.Net
        http://download.java.net/maven/2/
    
  

  
    
    
        javax
        javaee-api
        6.0
    
  

ただし、java.netのjavaee.jarにはメソッド本体は含まれていませんが、API名のみが含まれています。 これは、アプリケーションと一緒に実行またはデプロイするのに適していません。

常にhttp://java.sun.com/javaee/から元のフルバージョンのjavaee.jarファイルを取得することをお勧めします。 J2EE SDKをダウンロードしてインストールするだけで、javaee.jarは「\ J2EE_SDK_FOLDER \ lib」フォルダーにあります。 ローカルのMavenリポジトリに含めるか、プロジェクトのクラスパスで上記のエラーメッセージを取り除きます。