Я настраиваю сервер 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.
Заранее спасибо.
Дуг
UnsupportedClassVersionError
всегда появляется, когда вы компилируете "с" одной версией (ориентируясь на одну версию) и выполняете с предыдущей версией java.
JAVA_HOME
не сообщает операционной системе, где искать файл java.exe. Операционная система возьмет этот файл из переменной PATH. Поэтому рекомендуется добавлять в начале PATH
переменная, путь JAVA_HOME/bin
.
Если это не так, может быть полезна трассировка стека (остальная часть сообщения об ошибке). В частности "Неподдерживаемый major.minor" или что-то в этом роде, и цифры.
В Eclipse перейдите в настройки проекта, перейдите в настройки компилятора Java.
Что уровень соответствия компилятора?
Если вы используете это с Tomcat 7 с Java 7, тогда уровень соответствия должен быть установлен на 1,7. Если это не так, возможно, это ваша проблема. Хотя это должно быть хорошо, если это <= 1,7, вы бы случайно не настроили eclipse для снимка Java 8?
В любом случае, знание этого значения может помочь пролить свет на проблему.
Как вы развертываете свой код в Tomcat через Eclipse (WTP) или создаете WAR с помощью определенного инструмента сборки и вручную развертываете его на локальном Tomcat?