Ошибка Tomcat 11: скомпилирован более новой версией среды выполнения Java (версия файла класса 61.0)

Вопрос или проблема

Я установил Tomcat 11.0.0-M6 и получаю это сообщение об ошибке каждый раз, когда пытаюсь его запустить в первый раз:

Ошибка: LinkageError возникла при загрузке основного класса org.apache.catalina.startup.Bootstrap
java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap был скомпилирован более новой версией Java Runtime (версия файла класса 61.0), эта версия Java Runtime распознает только версии файлов класса до 55.0

Я проверил версию Java, выполнив java -version, и получил, что это версия 11, соответствующая версии файла класса 55, как требует Tomcat:
java version "11.0.12" 2021-07-20 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.12+8-LTS-237) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.12+8-LTS-237, mixed mode)

Затем я выполнил update-alternatives --display java и получил:

java - ручной режим
  лучшая версия - это /opt/jdk/jdk-11.0.12/bin/java
  сейчас ссылка указывает на /opt/jdk/jdk-11.0.12/bin/java
  ссылка java - это /usr/bin/java
/opt/jdk/jdk-11.0.12/bin/java - приоритет 100
/opt/jdk/jdk-17.0.7/bin/java - приоритет 100
/opt/jdk/jdk1.8.0_301/bin/java - приоритет 100

И мы видим, что используется Java 11, а не Java 17

Файл tomcat.service:

[Unit]
Description="Tomcat Service"
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
RestartSec=10
Restart=always


Environment="JAVA_HOME=/opt/jdk/jdk-11.0.12"
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
[Service]
Environment="CATALINA_OPTS=-Djava.library.path=/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu:/usr/lib64:/lib64:/lib:/usr/lib"

Есть у кого-нибудь идеи, что вызвало ошибку?

Спасибо за помощь

Ответ или решение

Уважаемый пользователь,

Ошибка, которую вы получили при попытке запустить Apache Tomcat 11, связана с несовместимостью между вашей версией Java Runtime Environment (JRE) и версией, в которой был скомпилирован Tomcat. Конкретно, версия классового файла 61.0 соответствует Java 17, тогда как ваша система использует Java 11, что соответствует классовой версии 55.0.

Проблема

Ошибка java.lang.UnsupportedClassVersionError указывает на то, что классы, используемые Tomcat, скомпилированы с использованием более новой версии JDK, чем та, которая установлена в вашей системе. В результатах команды java -version видно, что установлена Java версии 11.0.12, что несовместимо с требуемым уровнем для Tomcat 11, которая ожидает Java 17.

Решение

Обновление Java Runtime

  1. Установка JDK 17: Вам необходимо установить Java Development Kit (JDK) версии 17. Убедитесь, что JDK 17 установлен на вашем сервере.

  2. Настройка update-alternatives: После установки JDK 17, используйте команду update-alternatives для определения JDK 17 в качестве стандартной версии Java для системы.

    sudo update-alternatives --config java

    Выберите путь, указывающий на JDK 17.

  3. Изменение переменной JAVA_HOME: Обновите ваш файл службы Tomcat. Убедитесь, что в разделе [Service] переменная JAVA_HOME указывает на путь установки JDK 17:

    Environment="JAVA_HOME=/opt/jdk/jdk-17.0.x"
  4. Перезагрузка службы Tomcat: После внесения изменений перезапустите службу Tomcat для применения настроек:

    sudo systemctl daemon-reload
    sudo systemctl restart tomcat

Проверка

После выполнения вышеуказанных шагов запустите java -version для проверки текущей версии Java. Она должна соответствовать Java 17:

java version "17.0.x"
Java(TM) SE Runtime Environment (build 17.0.x+...)

Заключение

Ошибка была вызвана несовместимостью версий Java и Tomcat. Установка более новой версии Java решит вашу проблему, позволив успешно запустить Tomcat 11. Надеюсь, эта информация поможет вам устранить возникшие затруднения и обеспечить стабильную работу сервера.

С уважением,
Ваш IT-эксперт

Оцените материал
Добавить комментарий

Капча загружается...