Tomcat 7 выдает ошибку «Неподдерживаемая версия класса»

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.

Заранее спасибо.

Дуг

решение1

В Eclipse перейдите в настройки проекта, затем в настройки компилятора Java.

Чтоуровень соответствия компилятора?

Если вы запускаете это с Tomcat 7 с Java 7, то уровень соответствия должен быть установлен на1.7. Если это не так, то это может быть вашей проблемой. Хотя это должно быть нормально, пока это <=1.7, вы случайно не настроили Eclipse для снимка Java 8?

В любом случае, знание этого значения может помочь прояснить проблему.

решение2

UnsupportedClassVersionErrorвсегда появляется, когда вы компилируете «с» одной версией (нацеливаясь на одну версию) и выполняете с предыдущей версией Java.

JAVA_HOMEне сообщает операционной системе, где искать файл java.exe. Операционная система возьмет этот файл из переменной PATH. Вот почему рекомендуется добавлять в начало переменной PATHпуть JAVA_HOME/bin.

Если это не так, то стектрейс (остальная часть сообщения об ошибке) может быть полезен. В частности, "Unsupported major.minor" или что-то в этом роде, а также числа.

Дополнительная информация.

решение3

Как вы развертываете свой код на Tomcat: через Eclipse (WTP) или вы создаете WAR с помощью определенного инструмента сборки и вручную развертываете его на локальном Tomcat?

Связанный контент