問題

非常に奇妙で稀な問題は、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

によって引き起こされます。

多くの開発者は、

javaee.jar

を以下のMaven座標で取得したい:

  <repositories>
    <repository>
        <id>Java.Net</id>
        <url>http://download.java.net/maven/2/</url>
    </repository>
  </repositories>

  <dependencies>
    <!-- Javaee API -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
    </dependency>
  </dependencies>

ただし、java.netの

javaee.jar

にはメソッド本体は含まれていませんが、API名のみが含まれています。アプリケーションと共に実行または展開するのには適していません。

良い方法は、常にhttp://java.sun.com/javaee/から

javaee.jar

ファイルの元のフルバージョンを取得することです。 J2EE SDKをダウンロードしてインストールするだけで、

javaee.jar

は “\ J2EE

SDK

FOLDER \ lib”フォルダにあります。あなたのローカルMavenリポジトリにそれをインクルードするか、またはクラスパスが上記のエラーメッセージを取り除くでしょう。