Ошибка версии неподдерживаемого класса в Tomcat 7
Я настраиваю сервер Tomcat для размещения сайтов JSP. Я создал тестовое приложение в Eclipse, чтобы убедиться, что все работает. Все, что он делает, это печатает текст в JSP, затем вызывает функцию в пользовательском классе, который также печатает текст. Это отлично работает в Eclipse (запущенном на том же компьютере, что и Tomcat), когда я компилирую программу в файл WAR и пытаюсь запустить ее из Tomcat, выдается исключение:
message javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
description The server encountered an internal error that prevented it from fulfilling this request.
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
...
root cause
javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
...
root cause
java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2899)
...
Я должен отметить, что после обновления страницы ошибка меняется на UnsupportedClassVersionError
и теряет материал "Major.minor". Не уверен, что там происходит.
Google сказал мне, что это связано с тем, что среда выполнения является более старой версией, чем компилятор, однако, насколько я могу судить, Eclipse и Tomcat используют самую последнюю версию. Они находятся на одном компьютере, поэтому они должны использовать одну и ту же переменную JAVA_HOME, верно? У меня есть несколько различных установок JRE / JDK, и я попробовал несколько из них как JAVA_HOME, хотя, казалось, ничего не изменилось (я перезапускаю Tomcat каждый раз). На данный момент это:
JAVA_HOME = C:\Program Files\Java\jdk1.7.0_25
Path = C:\Program Files\Java\jdk1.7.0_25\bin; ...
Что-нибудь еще нужно настроить, чтобы Tomcat использовал эту версию Java? Или есть другое местоположение, на которое нужно указать JAVA_HOME? Я также попробовал несколько установок JRE, но ничего не нашел. Есть идеи с этим?
Все это делается на Windows Server 2008 R2 с использованием Tomcat 7.
Заранее спасибо.
Doug
3 ответа
В Eclipse перейдите в настройки проекта, перейдите в настройки компилятора Java.
Каков уровень соответствия компилятора?
Если вы выполняете это с Tomcat 7 с Java 7, тогда уровень соответствия должен быть установлен равным 1,7. Если это не так, то это может быть вашей проблемой. Хотя все должно быть хорошо, пока оно <= 1,7, вы бы случайно не настроили затмение для снимка Java 8?
В любом случае, знание этого значения может помочь осветить проблему.
UnsupportedClassVersionError
всегда появляется, когда вы компилируете "с" одной версией (для одной версии) и выполняете с предыдущей версией Java.
JAVA_HOME
не сообщает операционной системе, где искать файл java.exe. Операционная система возьмет этот файл из переменной PATH. Вот почему рекомендуется добавлять в начале PATH
переменная, путь JAVA_HOME/bin
,
Если это не так, трассировка стека (остальная часть сообщения об ошибке) может быть полезна. В частности "Unsupported major.minor" или что-то в этом роде, и цифры.
Как вы развертываете свой код в Tomcat через Eclipse (WTP) или вы создаете WAR-файл с помощью специального инструмента сборки и вручную развертываете его на локальном Tomcat?