java.lang.ClassFormatError:クラスファイル内でネイティブでも抽象的でもないメソッドのコード属性が存在しない…
問題
非常に奇妙で稀な問題は、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リポジトリにそれをインクルードするか、またはクラスパスが上記のエラーメッセージを取り除くでしょう。