繁体   English   中英

tomcat UnsupportedClassVersionError

[英]tomcat UnsupportedClassVersionError

我的 Mac 上有一个 bitnami Tomcat 7 安装(apache + tomcat + mysql),使用 java 1.7 76。我的 Mac 使用 java 1.8 运行时。 当我将我的项目(在同一台 Mac 上的 intellij 中制作)部署到 tomcat 并尝试运行它时,我得到一个 UnsupportedClassVersionError。 我用来编译项目的JDK版本无关紧要(我已经尝试过apple 1.6、oracle 1.7和oracle 1.8版本),而且我设置的语言级别似乎也无关紧要。 运行应用程序的唯一方法是使用语言级别 1.3(使用 JDK 1.7 of 1.8)

为了解决这个问题,我现在将 tomcat 设置为在 Mac 上安装的 1.8 JDK 上运行,然后我将 intellij 配置为使用相同的 JDK。 现在一切正常。

我的问题:我是否总是需要使用与运行 tomcat 的 java 版本完全相同的 JDK 版本进行编译? 或者我做错了什么。

完整的错误:(有时还会显示 UnsupportedClassVersionError: minor version)

HTTP Status 500 - javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: test/TestClass

type Exception report

message javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: test/TestClass

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: test/TestClass
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: test/TestClass
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:916)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:845)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:94)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

java.lang.UnsupportedClassVersionError: test/TestClass
    org.apache.jsp.index_jsp._jspService(index_jsp.java:74)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.61 logs.

无论是在 IDE 还是 Tomcat 中使用,在编译时和运行时阶段使用一个版本的 JDK 和 JRE 始终是一个好习惯。 还要确保使用与运行测试用例(如果有)和 tomcat 相同版本的 JRE,以避免遇到此类问题。

我的问题:我是否总是需要使用与运行 tomcat 的 java 版本完全相同的 JDK 版本进行编译?

有时,如果您在较低版本上编译代码并在较高版本上运行它,您可能会避开这个问题,但如果可能,您应该避免这种情况。 因此,请尝试使用来自 IDE 的相同 JDK 版本进行编译,并使用来自 Tomcat 的相同版本的 JRE 来部署您的项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM