Tomcat не розпізнає JAVA_HOME


15

Я встановив сервер 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і це спрацювало?

Відповіді:


23

Текст довідки в 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, але працює один користувач. На вас не вплине інше середовище користувача.


4

Оскільки ви встановили змінну середовища для власного користувача, а не для суперпользователя, у вас є два варіанти:

  1. Вам доведеться експортувати змінну, використовуючи -Eнаступний варіант:

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

    Зауважте, що це буде експортувати всі змінні середовища під час виконання команди. Це не є кращим, оскільки нормальне середовище користувачів розливається, коли ви запускаєте команду як root. Це не бажано.

  2. Експортуйте змінну у файл root.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

а потім виконати команду, яка використовує встановлені змінні середовища.


1
Дякую @Jobin - варіант 1 працює, тому я підтримав вашу відповідь. Зараз я перевірю варіант 2, який є моїм кращим рішенням, і якщо він працює, я прийму вашу відповідь.
isapir

Я додав команди до /root/.bashrcnano, як ви запропонували, але виклик user@ubuntu:~$ source /root/.bashrcрезультатів -bash: /root/.bashrc: Permission deniedі спробування з судо врожаєм sudo: source: command not found. повторна спроба оригінальної команди в цей момент повертає мене до точки 0.
isapir

@Igal: Відредагувавши мою відповідь, щоб вирішити цю проблему, спочатку слід скористатися sudo -iперед вами source. Дякуємо, що вказали на це.
jobin

Добре, вибачте за новичок, але як я можу вийти з sudo -iодного разу, коли я зателефонував до джерела? не виходячи, я отримую оригінальне повідомлення про помилку ...
isapir

@Igal: Просто натисніть Ctrl + d або введіть exit.
jobin

0

Я шукав рішення, в /etc/environmentякому, як зазначено в EnvironmentVariables , не обробляє сценарії та не розширює змінні, тому додавання наступного ( без експорту) зробило трюк:

JAVA_HOME=/opt/java/jdk1.8.0_05

Потім я перезавантажив систему, щоб зміни вплинули.


0

Я додав 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.