问题
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 :
<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,即可在“ \ J2EE_SDK_FOLDER \ lib”文件夹中找到javaee.jar 。 将其包含在本地Maven存储库中,否则poject类路径将摆脱上面的错误消息。
参考
- http://weblogs.java.net/blog/ludo/archive/2007/01/java_ee_5_apis.html
- http://forums.java.net/jive/message.jspa?messageID=226931
- http://jersey.576304.n2.nabble.com/Absent-Code-attribute-in-method-that-is-not-native-td2632542.html