2015-05-15 5 views
1

У меня есть bitnami Tomcat 7 (apache + tomcat + mysql) на моем Mac, с использованием java 1.7 76. Мой Mac использует java 1.8 runtime. Когда я развертываю свой проект (сделанный в intellij на том же Mac) в tomcat и пытаюсь запустить его, я получаю UnsupportedClassVersionError. Неважно, какую версию JDK я использую для компиляции проекта (я пробовал версии 1.6, oracle 1.7 и oracle 1.8), и, похоже, не имеет значения, какой языковой уровень я задал. Единственный способ запуска приложения - использовать уровень 1.3 (с использованием JDK 1.7 из 1.8)tomcat UnsupportedClassVersionError

Чтобы устранить проблему, я установил tomcat для запуска на 1.8 JDK, установленном на моем Mac, после чего я настроил intellij на используйте тот же JDK. Теперь все работает отлично.

Мой вопрос: Всегда ли нужно компилировать, используя ту же самую версию JDK, что и java-версия, которая запускает tomcat? Или я делаю что-то неправильно.

Полная ошибка: (иногда также показывает UnsupportedClassVersionError: младшая версия)

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. 

ответ

1

Это всегда хорошая практика, чтобы использовать одну версию JDK и JRE для компиляции и во время выполнения этапов, используется ли из IDE или Кот. Также не забудьте использовать ту же версию JRE, которую вы использовали для запуска тестовых примеров (если они есть) & tomcat, чтобы избежать проблем с этими проблемами.

My question: Do I always need to compile using the exact same version of the JDK as the java version that runs tomcat?

Иногда вы можете уйти с этой проблемой, если вы компилируете код на более низкую версию и запустить его на более высокой версии, но вы должны избежать этой ситуации, если это возможно. Поэтому попробуйте использовать ту же версию JDK из IDE для компиляции и той же версии JRE от Tomcat для развертывания вашего проекта.

+0

Приятно знать, что мое текущее решение является правильным. Спасибо за ваше объяснение. – projectIncomplete

+0

Если это так, вы можете пометить его разрешенным тогда. –

+1

Некоторые дополнительные указатели. Обратите внимание, что это также относится ко всем используемым библиотекам: иметь встроенную банку на Java8 и запускать ее на Java7, может создать такую ​​же проблему - не только ваши пользовательский код. Кроме того, если ваш tomcat использовался для запуска на Java8, а затем вы меняете его на Java7, он уже скомпилировал JSP-файлы с Java8. –

Смежные вопросы