我有一个 JSP 项目在 tomcat 6.0.32 和 java 6 上运行,突然抛出这个异常
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file com/company/secure/Account
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
java.lang.ClassLoader.defineClass(ClassLoader.java:615)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
java.lang.Class.getConstructor0(Class.java:2699)
java.lang.Class.newInstance0(Class.java:326)
java.lang.Class.newInstance(Class.java:308)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:150)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:338)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
filters.ObjectsCacheFilter.doFilter(ObjectsCacheFilter.java:43)
filters.FilterCach.doFilter(FilterCach.java:81)
filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:123)
注意 Apache Tomcat/6.0.32 日志中提供了根本原因的完整堆栈跟踪。 Apache Tomcat/6.0.32
最佳答案
问题是由于您的网络应用程序(在本例中为 JSP 框架)试图从仅包含 API 的 JAR 文件加载类。
这是问题的另一个示例(尽管可能针对不同的 Java EE API):
说明:一些 Java EE API 有两种形式;即 2 个不同的 JAR 文件:
特定于平台的表单包含所有方法的代码。此 JAR 通常是 Web 容器的一部分,默认情况下包含在每个 Web 应用的有效类路径中。
仅 API 形式的方法的可执行代码已被剥离。此 JAR 由 Oracle 提供,允许您独立于任何特定的 Java EE 实现来编译 Java EE 应用程序代码。
问题很可能是您将这些仅 API JAR 之一放到了您的网络应用程序的运行时类路径中,并且它优先于特定于平台的 JAR。
鉴于这是“突然发生的”,我怀疑您一直在更改项目的 Maven 依赖项,并且(不小心)使仅 API 的 JAR 文件成为运行时依赖项而不是仅编译时依赖项。
解决方案:检查您的 Web 应用程序的 Maven(等)依赖项,或者如果您手动管理依赖项,请检查您已将哪些 JAR 放入 Web 应用程序的 WEB-INFO/lib
目录和 Web 容器的共享库目录。
关于java - 类 ClassFormatError :Absent-Code-attribute-in-method-that-is-not-native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347301/