問題
非常に奇妙で稀な問題は、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リポジトリにそれをインクルードするか、またはクラスパスが上記のエラーメッセージを取り除くでしょう。