Tomcat 7 с Java 8 на Windows и Linux

У меня возникла следующая проблема:

Я хочу использовать Java Servlet, созданный на целевой Java-8 с Apache Tomcat 7.0.54.

Когда я запускаю его на своей локальной машине (Win-64, jdk build 1.8.0-b132), он отлично работает.

Но когда я развертываю его на производстве (Debian GNU/Linux 7.5 (wheezy), jdk build 1.8.0-b132, Tomcat 7.0.54-2), он бросает:

Unsupported major.minor version 52.0 (unable to load class ru.tomtrix.fvds.servlets.ItemServlet)

... это означает неподдерживаемые классы Java-8. Итак, что происходит с Windows и Linux в версии той же версии Tomcat?

Ответ 1

Спасибо, все, я нашел, что произошло. Оказалось, что JAVA_HOME не был определен надлежащим образом (как упоминалось выше, и Марко Топольник). Я открыл /etc/default/tomcat7 и изменил этот раздел:

# The home directory of the Java development kit (JDK). You need at least
# JDK version 6. If JAVA_HOME is not set, some common directories for
# OpenJDK, the Oracle JDK, and various Java SE 6+ versions are tried.
#JAVA_HOME=/usr/lib/jvm/openjdk-6-jdk
JAVA_HOME=/path/to/my/jdk

... и все начинает работать! Действительно ли Tomcat использует встроенный JDK файл, например OpenJDK?

Ответ 2

Каждый экземпляр Tomcat по умолчанию использует JDK по умолчанию на машине. Вы либо изменяете JDK по умолчанию (если используете один экземпляр Tomcat), либо говорите Tomcat, чтобы использовать другой JDK.

  • Для установки другого JDK для каждого экземпляра TOMCAT:

catalina.sh вызывает setenv.sh для использования JDK. Создайте файл setenv.sh в CATALINA_BASE/bin, если он не существует. CATALINA_BASE обозначает папку Tomcat. Открыть setenv.sh с gedit:

sudo gedit setenv.sh

напишите эту строку:

export JAVA_HOME=/path/to/your/JDK

Tomcat рекомендует экспортировать JAVA_HOME в setenv.sh, а не в catalina.sh.

  1. Для изменения JDK по умолчанию на Ubuntu:

    sudo update-alternatives --install/your/path/to/JDK/bin/java

или:

sudo update-alternative --install  ${JAVA_HOME}/bin/java

если у вас определен JAVA_HOME.

Ответ 3

Переменная среды JAVA_HOME не имеет отношения к тому, как Eclipse будет запускать код. Аналогично, параметры компилятора, которые вы показывали для проекта, не влияют на то, как выполняется код.

Вместо этого вам нужно взглянуть на используемую конфигурацию запуска и проверить там окружение. Убедитесь, что вы используете Java 8, и все должно быть хорошо. Нажмите треугольник рядом с кнопкой "Выполнить" и выберите "Запустить конфигурацию...", чтобы открыть диалог со всеми настройками. Затем перейдите на вкладку JRE и убедитесь, что вы используете правильную JRE.