Tomcat non riconosce JAVA_HOME


15

Ho installato Ubuntu 14.04 Server, estratto JDK1.8u5 e Tomcat7 e aggiunto quanto segue a .profile (ho anche provato ad aggiungerlo a .bashrc con risultati [non-] simili):

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

quando corro echo $JAVA_HOMEottengo il risultato atteso di /opt/java/jdk1.8.0_05. Posso anche eseguire java -versione ottenere la risposta corretta da Java. Fin qui tutto bene.

quindi ora provo ad avviare Tomcat (provato anche catalina.sh) e ottengo quanto segue:

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

ma ... ho appena provato echo $JAVA_HOMEe ha funzionato?

Risposte:


23

C'è un testo di aiuto in catalina.sh. Lo citerò qui:

#   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

Quando si inizia a tomcatutilizzare catalina.sh, cerca il file setenv.she lo approvvigiona . Sta cercando in CATALINA_HOMEo CATALINA_BASE.

Quindi il modo migliore per set JAVA_HOMEper la tomcatè:

  1. Crea uno script chiamato setenv.shnella cartella CATALINA_BASE/bin, se non esiste già.
  2. Aggiungi questa linea a setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. Renderlo eseguibile.


Perché dovresti usare questa soluzione:

L'impostazione della variabile di ambiente nello script è più sicura. Cerca sempre di impostare le variabili il più localmente possibile. Prova a non usare /etc/environment, /etc/profilee altri se davvero non ti servono Global Environment Variable. Impostazione JAVA_HOMEin setenv.shvi dà la capacità di utilizzare diversi tomcats con diverse applicazioni che hanno bisogno di versione differente di java, ma in esecuzione da un utente. Altri ambienti dell'utente non sarebbero interessati da te.


4

Dato che hai impostato la variabile d'ambiente per il tuo utente e non per il superutente, hai due opzioni:

  1. Dovrai esportare la variabile usando l' -Eopzione come segue:

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

    Si noti che ciò esporterà tutte le variabili di ambiente durante l'esecuzione del comando. Questo non è preferito poiché l'ambiente normale degli utenti viene distribuito quando si esegue il comando come root. Questo non è desiderabile.

  2. Esporta la variabile nel file di root.bashrc /etc/enviroment . Apri un terminale e digita:

    sudo nano /etc/environment

    e inserisci la tua password amministrativa e aggiungi le seguenti righe alla fine del file:

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

    e poi

    source /etc/environment

    o riavvia il computer e quindi riprova il comando che stavi utilizzando.


Aggiornare:

Questa risposta ha suggerito due motivi per cui il passaggio 2 non funzionava, sudoripristinava l'ambiente e forniva un percorso sicuro, quindi tutte le variabili globali vengono ripristinate. Una soluzione alternativa sarebbe usare

sudo su

e quindi eseguire il comando che utilizza le variabili di ambiente impostate.


1
Grazie @Jobin - l'opzione 1 funziona quindi ho votato a favore della tua risposta. Ora controllerò l'opzione 2, che è la mia soluzione preferita, e se funziona accetterò la tua risposta.
Isapir,

Ho aggiunto i comandi /root/.bashrccon nano, come hai suggerito, ma chiamando i user@ubuntu:~$ source /root/.bashrcrisultati -bash: /root/.bashrc: Permission deniede provandolo con sudo produce sudo: source: command not found. ritentare il comando originale a questo punto mi riporta al punto 0.
Isapir,

@Igal: ho modificato la mia risposta per risolvere il problema, dovresti prima usarlo sudo -iprima di te source. Grazie per la segnalazione.
lavoro

ok, scusate le domande per i principianti, ma come posso uscire da sudo -iuna volta che ho chiamato fonte? senza uscire ricevo il messaggio di errore originale ...
isapir,

@Igal: basta premere Ctrl + d o digitare exit.
impiego

0

La soluzione che stavo cercando è in /etc/environmentcui, come specificato in EnvironmentVariables , non elabora gli script e non espande le variabili, quindi l'aggiunta di quanto segue ( senza esportazione) ha fatto il trucco:

JAVA_HOME=/opt/java/jdk1.8.0_05

Quindi ho riavviato il sistema affinché le modifiche abbiano effetto.


0

Ho aggiunto JAVA_HOME nello tomcat7.servicescript perché setenv.shnon è stato ottenuto dacatalina.sh

passi:

1.Aprire il file di script del servizio tomcat7

sudo gedit /etc/init.d/tomcat7

2.Impostare 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. Avviare il servizio Tomcat7

sudo service tomcat7 status

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.