Tomcat не распознает JAVA_HOME

Я установил Сервер Ubuntu 14.04, извлек JDK1.8u5 и Tomcat7, и добавил следующее к .profile (я также пытался добавить его к .bashrc с подобным [не-] результаты):

export JAVA_HOME=/opt/java/jdk1.8.0_05
export PATH=$PATH:$JAVA_HOME/bin

когда я работаю echo $JAVA_HOME Я получаю ожидаемый результат /opt/java/jdk1.8.0_05. Я могу также работать java -version и получите корректный ответ от Java.пока все хорошо.

таким образом, теперь я пытаюсь запустить Tomcat (попробованный также catalina.sh), и я получаю следующее:

user@ubuntu:~$ sudo /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

но... Я просто попробовал echo $JAVA_HOME и это работало?

14
задан 19 May 2014 в 02:52

5 ответов

Существует текст справки в catalina.sh. Я заключу его в кавычки здесь:

#   Do not set the variables in this script. Instead put them into a script
#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi

Когда Вы запуск tomcat использование catalina.sh, это ищущий файл setenv.sh и определение источника его. Это ищет в CATALINA_HOME или CATALINA_BASE.

Так лучший способ установить JAVA_HOME для tomcat :

  1. Создайте названный сценарий setenv.sh в папке CATALINA_BASE/bin, если это уже не существует.
  2. Добавьте эту строку к setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
    
  3. Сделайте это исполняемым файлом.


Почему необходимо использовать это решение:

Установка переменной среды в сценарии более безопасна. Всегда пытайтесь установить переменные максимально локально. Попытка не использует /etc/environment, /etc/profile и другие, если Вам действительно не нужно Global Environment Variable. Установка JAVA_HOME в setenv.sh дает Вам способность использовать различных котов с различными приложениями, для которых нужна другая версия java, но работая одним пользователем. Другая пользовательская среда не была бы затронута Вами.

21
ответ дан 16 November 2019 в 13:41

Так как Вы установили переменную среды для своего собственного пользователя а не для суперпользователя, у Вас есть две опции:

  1. необходимо будет экспортировать переменную с помощью -E опция следующим образом:

    sudo -E /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
    

    Примечание, что это экспортирует все переменные среды при выполнении команды. Это не предпочтено, так как среда обычных пользователей вылита при выполнении команды как корня. Это не желательно.

  2. Экспорт переменная в <забастовке> корень .bashrc /etc/enviroment файл. Откройте терминал и тип:

    sudo nano /etc/environment
    

    и вводят Ваш пароль администратора и добавляют следующие строки до конца файла:

    JAVA_HOME=/opt/java/jdk1.8.0_05
    PATH=$PATH:$JAVA_HOME/bin
    

    и затем

    source /etc/environment
    

    или перезапуск Ваша машина и затем повторяет команду, которую Вы использовали.

<час>

Обновление:

Этот ответ обеспечил подсказки как два, почему шаг 2 не будет работать, sudo сбросил бы среду и обеспечил бы безопасный путь, таким образом, все глобальные переменные сбрасываются. Обходное решение должно было бы использовать

sudo su

и затем выполнить команду, которая использует переменные среды набора.

4
ответ дан 16 November 2019 в 13:41

Решение, которое я искал, находится в /etc/environment, который, как определено в EnvironmentVariables, не обрабатывает сценарии и не разворачивает переменные, таким образом добавляя, что следующее ( без экспорт) добилось цели:

JAVA_HOME=/opt/java/jdk1.8.0_05

Тогда я перезагрузил систему для изменений для взятия влияния.

0
ответ дан 16 November 2019 в 13:41

Я добавил JAVA_HOME в tomcat7.service, сценарий как setenv.sh не был, получены catalina.sh

Шаги:

1. Откройте tomcat7 сервисный файл

sudo gedit /etc/init.d/tomcat7

2 сценария. JAVA_HOME

.
.
.
JAVA_HOME=/usr/lib/jvm/java-8-oracle

# Directory where the Tomcat 6 binary distribution resides
CATALINA_HOME=/usr/share/$NAME

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/$NAME

# Use the Java security manager? (yes/no)
TOMCAT7_SECURITY=no

3 набора. Запустите tomcat7 сервис

sudo service tomcat7 status

0
ответ дан 16 November 2019 в 13:41

Выберите или попробуйте другой JDK.

Установите $JAVA_HOME, как описано во вводной части catalina.sh или другой документации Tomcat, и не меняйте ничего, кроме определенных в нем переменных среды (например, Catalina Home/Base ). Затем запустите следующее:

sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javadoc
sudo update-alternatives --config javap

На каждом из них мне пришлось переключиться с версии 11 на версию 8 Java Development Kit/JDK для версии 8 tomcat. Я тестировал дважды, и я уверен, что это было решением (с обновите альтернативы, программы, зависящие от Java, знают, где найти Java, поэтому вам не нужно повторять в файле env vars). Первоначально я обнаружил, что мой сценарий shutdown.sh искал мой сервер на порту 8005, хотя он был запущен на 8080 (Severe не удалось связаться с localhost:8005. Возможно, Tomcat не запущен. Или ошибка отказа в соединении). Но сам сервер отключился. Я снова вручную запустил его и снова выключил только для того, чтобы обнаружить, что ошибка не повторяется.

Присоединяйтесь к группе пользователей Tomcat, я думаю, вы увидите, что сам по себе Tomcat может быть головной болью. Тогда будьте терпеливы к себе!

NB/ПРЕДОСТЕРЕЖЕНИЕ: тестируйте одно изменение за раз и соответствующим образом обновляйте остальные.

0
ответ дан 24 April 2020 в 21:55

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

Похожие вопросы: