Ошибка версии неподдерживаемого класса в 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?

Другие вопросы по тегам