Несоответствие версии Java между webapp и tomcat

Я написал веб-приложение в Eclipse, развернутое в Tomcat 8. Веб-приложение включает в себя утилиту электронной почты, с помощью которой пользователи могут отправлять контактную информацию, которая отправляется мне по электронной почте с веб-сервера.

Он работает, когда я запускаю веб-приложение из Eclipse (используя экземпляр Tomcat на моем локальном хосте).

Я развернул веб-приложение на сервере, и, похоже, он работает нормально, пока я не попытаюсь отправить информацию о контакте.

Когда я нажимаю кнопку «Отправить» в форме, вызывающей сервлет, я получаю следующее исключение:

 java.lang.UnsupportedClassVersionError: com/electraink/rental/servlets/ContactInfo has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class com.electraink.rental.servlets.ContactInfo)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2500)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:860)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1302)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
org.apache.coyote.ajp.AbstractAjpProcessor.process(AbstractAjpProcessor.java:844)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)

Я не знаю, где несоответствие. Сервер, на котором запущен экземпляр Tomcat8, показывает эту версию Java:

[root@web1 downloads]# java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

В проекте Eclipse используется jdk-1.8.0_45..

Мне кажется, что Tomcat использует более новую, а не старую JVM, чем та, в которой было создано веб-приложение.

Где несоответствие? Какую Java мне нужно обновить и до какой? (Изначально я использовал Java 9 при создании веб-приложения в Eclipse, пока не увидел эту ошибку, а затем перешел на Java 8).

Спасибо, Джерри

Просто установите тот же java, который настроен для использования eclipse ide для apache tomcat.

NiVeR 22.07.2018 01:21

Как видно из повторяющийся ответ, класс com.electraink.rental.servlets.ContactInfo был скомпилирован с использованием Java 9 (версия файла класса 53.0), а Tomcat работает под управлением Java 8 (версии файлов классов до 52.0).

Andreas 22.07.2018 01:23
«Изначально я использовал Java 9 при создании веб-приложения в Eclipse, пока не увидел эту ошибку, а затем перешел на Java 8» Тогда нужно сделать полную перестройку. В Eclipse выберите раскрывающееся меню Project> Clean...
Andreas 22.07.2018 01:25

Я перестраивал проект Eclipse несколько раз с указанием пути сборки Java 8, но в исключении все еще упоминается версия файла класса 53. Кроме того, это веб-приложение. Исключение не генерируется до тех пор, пока сервлет не будет вызван, и сервлет в любом случае не должен компилироваться в Eclipse, он компилируется во время выполнения. Это должно быть гарантировано, поскольку я стираю весь каталог приложения в Tomcat8 / webapps каждый раз, когда развертываю приложение, и в этот момент я перезапускаю tomcat. Так где же вызывается Java 9? Что мне нужно изменить, чтобы все процессы работали на одном jre?

Jerry 22.07.2018 02:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
501
0

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