Я установил Сервер 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
и это работало?
Существует текст справки в 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
:
setenv.sh
в папке CATALINA_BASE/bin
, если это уже не существует.Добавьте эту строку к setenv.sh
export JAVA_HOME=/opt/java/jdk1.8.0_05
Сделайте это исполняемым файлом.
Установка переменной среды в сценарии более безопасна. Всегда пытайтесь установить переменные максимально локально. Попытка не использует /etc/environment
, /etc/profile
и другие, если Вам действительно не нужно Global Environment Variable
. Установка JAVA_HOME
в setenv.sh
дает Вам способность использовать различных котов с различными приложениями, для которых нужна другая версия java
, но работая одним пользователем. Другая пользовательская среда не была бы затронута Вами.
Так как Вы установили переменную среды для своего собственного пользователя а не для суперпользователя, у Вас есть две опции:
необходимо будет экспортировать переменную с помощью -E
опция следующим образом:
sudo -E /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
Примечание, что это экспортирует все переменные среды при выполнении команды. Это не предпочтено, так как среда обычных пользователей вылита при выполнении команды как корня. Это не желательно.
Экспорт переменная в <забастовке> корень .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
и затем выполнить команду, которая использует переменные среды набора.
Решение, которое я искал, находится в /etc/environment
, который, как определено в EnvironmentVariables, не обрабатывает сценарии и не разворачивает переменные, таким образом добавляя, что следующее ( без экспорт) добилось цели:
JAVA_HOME=/opt/java/jdk1.8.0_05
Тогда я перезагрузил систему для изменений для взятия влияния.
Я добавил 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
Выберите или попробуйте другой 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/ПРЕДОСТЕРЕЖЕНИЕ: тестируйте одно изменение за раз и соответствующим образом обновляйте остальные.