Я написал веб-приложение в 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).
Спасибо, Джерри
Как видно из повторяющийся ответ, класс com.electraink.rental.servlets.ContactInfo был скомпилирован с использованием Java 9 (версия файла класса 53.0), а Tomcat работает под управлением Java 8 (версии файлов классов до 52.0).
Project> Clean...Я перестраивал проект Eclipse несколько раз с указанием пути сборки Java 8, но в исключении все еще упоминается версия файла класса 53. Кроме того, это веб-приложение. Исключение не генерируется до тех пор, пока сервлет не будет вызван, и сервлет в любом случае не должен компилироваться в Eclipse, он компилируется во время выполнения. Это должно быть гарантировано, поскольку я стираю весь каталог приложения в Tomcat8 / webapps каждый раз, когда развертываю приложение, и в этот момент я перезапускаю tomcat. Так где же вызывается Java 9? Что мне нужно изменить, чтобы все процессы работали на одном jre?




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