Tomcat nie rozpoznaje JAVA_HOME

15

Zainstalowałem Ubuntu 14.04 Server, wyodrębniłem JDK1.8u5 i Tomcat7 i dodałem następujące pliki do .profile (próbowałem również dodać go do .bashrc z podobnymi [nie] wynikami):

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

kiedy biegam echo $JAVA_HOME, otrzymuję oczekiwany wynik /opt/java/jdk1.8.0_05. Mogę również uruchomić java -versioni uzyskać poprawną odpowiedź z Java. jak na razie dobrze.

więc teraz próbuję uruchomić Tomcat (próbowałem również catalina.sh) i otrzymuję:

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

ale ... Właśnie próbowałem echo $JAVA_HOMEi zadziałało?

isapir
źródło

Odpowiedzi:

23

Jest tam tekst pomocy catalina.sh. Zacytuję to tutaj:

#   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

Kiedy zaczynasz tomcatużywać catalina.sh, szuka pliku setenv.shi pozyskuje go. Szuka w CATALINA_HOMElub CATALINA_BASE.

Więc w lepszy sposób, aby ustawić JAVA_HOMEdla osób tomcatwynosi:

  1. Utwórz skrypt o nazwie setenv.shw folderze CATALINA_BASE/bin, jeśli jeszcze nie istnieje.
  2. Dodaj tę linię do setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. Zrób to.


Dlaczego warto skorzystać z tego rozwiązania:

Ustawienie zmiennej środowiskowej w skrypcie jest bezpieczniejsze. Zawsze staraj się ustawiać zmienne tak lokalnie, jak to możliwe. Spróbuj nie używać /etc/environment, /etc/profilea inni, jeśli naprawdę nie potrzebują Global Environment Variable. Ustawienie JAVA_HOMEw setenv.shdaje możliwość korzystania z różnych Tomcats z różnymi aplikacjami, które wymagają innej wersji java, ale działa przez jednego użytkownika. Nie wpłynie to na inne środowisko użytkownika.

c0rp
źródło
4

Ponieważ ustawiłeś zmienną środowiskową dla własnego użytkownika, a nie dla administratora, masz dwie opcje:

  1. Będziesz musiał wyeksportować zmienną, używając -Eopcji w następujący sposób:

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

    Pamiętaj, że spowoduje to wyeksportowanie wszystkich zmiennych środowiskowych podczas uruchamiania polecenia. Nie jest to preferowane, ponieważ środowisko zwykłych użytkowników jest rozlewane po uruchomieniu polecenia jako root. To nie jest pożądane.

  2. Wyeksportuj zmienną do.bashrc /etc/enviroment pliku roota . Otwórz terminal i wpisz:

    sudo nano /etc/environment

    i wprowadź hasło administracyjne i dodaj następujące wiersze na końcu pliku:

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

    i wtedy

    source /etc/environment

    lub uruchom ponownie komputer, a następnie spróbuj ponownie użyć polecenia.


Aktualizacja:

Ta odpowiedź zawierała dwie wskazówki, dlaczego krok 2 nie zadziała, sudozresetuje środowisko i zapewni bezpieczną ścieżkę, więc wszystkie zmienne globalne zostaną zresetowane. Obejściem byłoby użycie

sudo su

a następnie wykonaj polecenie, które używa ustawionych zmiennych środowiskowych.

Praca w
źródło
1
Dzięki @Jobin - opcja 1 działa, więc głosowałem za odpowiedź. Teraz sprawdzę opcję 2, która jest moim preferowanym rozwiązaniem, a jeśli zadziała, zaakceptuję twoją odpowiedź.
isapir
Dodałem polecenia do /root/.bashrcnano, jak sugerowałeś, ale wywoływanie user@ubuntu:~$ source /root/.bashrcpowoduje -bash: /root/.bashrc: Permission deniedi wypróbowanie go z sudo sudo: source: command not found. ponawianie oryginalnej komendy w tym miejscu sprowadza mnie z powrotem do punktu 0.
isapir
@Igal: Zredagowałem moją odpowiedź, aby rozwiązać ten problem, powinieneś najpierw użyć sudo -iprzed sobą source. Dzięki za zwrócenie na to uwagi.
Jobin
ok, przepraszam pytania początkujących, ale jak mogę wyjść z sudo -iraz nazywanego source? bez wychodzenia otrzymuję oryginalny komunikat o błędzie ...
isapir
@Igal: Naciśnij Ctrl + d lub wpisz exit.
Jobin
0

Rozwiązanie, którego szukałem, polega na /etc/environmenttym, że, jak określono w EnvironmentVariables , nie przetwarza skryptów i nie rozwija zmiennych, więc załatwienie następującego ( bez eksportu) załatwiło sprawę:

JAVA_HOME=/opt/java/jdk1.8.0_05

Następnie ponownie uruchomiłem system, aby zmiany odniosły skutek.

isapir
źródło
0

Dodałem JAVA_HOME w tomcat7.serviceskrypcie, ponieważ setenv.shnie został pobrany przezcatalina.sh

Kroki:

1. Otwórz plik skryptu usługi tomcat7

sudo gedit /etc/init.d/tomcat7

2.Ustaw 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. Uruchom usługę tomcat7

sudo service tomcat7 status

CᴴᴀZ
źródło