web-dev-qa-db-fra.com

Tomcat ne reconnaît pas Java_HOME

J'ai installé Ubuntu 14.04 Server, extrait JDK1.8u5 et Tomcat7, et ajouté les éléments suivants à .profile (j'ai également essayé de l'ajouter à .bashrc avec des résultats [non] similaires):

export Java_HOME=/opt/Java/jdk1.8.0_05
export PATH=$PATH:$Java_HOME/bin

quand je lance echo $Java_HOME, le résultat attendu est /opt/Java/jdk1.8.0_05. Je peux également exécuter Java -version et obtenir la réponse correcte de Java. jusqu'ici tout va bien.

alors maintenant, j'essaye de démarrer Tomcat (essayé aussi catalina.sh), et j'obtiens ce qui suit:

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

mais ... je viens d'essayer echo $Java_HOME et ça a fonctionné?

14
isapir

Il y a un texte d'aide dans catalina.sh. Je vais le citer ici:

#   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

Lorsque vous démarrez Tomcat à l'aide de catalina.sh, il recherche le fichier setenv.sh et sourcing it. Il recherche dans CATALINA_HOME ou CATALINA_BASE.

La meilleure façon de définir Java_HOME pour le Tomcat est la suivante:

  1. Créez un script nommé setenv.sh dans le dossier CATALINA_BASE/bin, s'il n'existe pas déjà.
  2. Ajouter cette ligne à setenv.sh

    export Java_HOME=/opt/Java/jdk1.8.0_05
    
  3. Rendez-le exécutable.


Pourquoi devriez-vous utiliser cette solution:

Définir la variable d'environnement dans le script est plus sûr. Essayez toujours de définir les variables aussi localement que possible. Essayez de ne pas utiliser /etc/environment, /etc/profile et d’autres si vous avez réellement à ne pas faire besoin de Global Environment Variable. Le paramétrage de Java_HOME dans setenv.sh vous permet d’utiliser différents chats avec différentes applications nécessitant une version différente de Java, mais exécutée par un seul utilisateur. Les autres environnements utilisateur ne seraient pas affectés par vous.

18
c0rp

Puisque vous avez défini la variable d'environnement pour votre propre utilisateur et non pour le superutilisateur, vous avez deux options:

  1. Vous devrez exporter la variable en utilisant l'option -E comme suit:

    Sudo -E /opt/Tomcat7/Apache-Tomcat-7.0.53/bin/startup.sh
    

    Notez que cela exportera toutes les variables d'environnement lors de l'exécution de la commande. Cela n'est pas recommandé, car l'environnement des utilisateurs normaux est épuisé lorsque vous exécutez la commande en tant que root. Ce n'est pas souhaitable.

  2. Exporter la variable en .bashrc de la racine /etc/enviroment fichier. Ouvrez un terminal et tapez:

    Sudo nano /etc/environment
    

    et entrez votre mot de passe administratif, puis ajoutez les lignes suivantes à la fin du fichier:

    Java_HOME=/opt/Java/jdk1.8.0_05
    PATH=$PATH:$Java_HOME/bin
    

    et alors

    source /etc/environment
    

    ou redémarrez votre ordinateur, puis relancez la commande que vous utilisiez.


Mise à jour:

Cette réponse donnait des indications car deux des raisons pour lesquelles l'étape 2 ne fonctionnerait pas, Sudo réinitialiserait l'environnement et fournirait un chemin sécurisé, de sorte que toutes les variables globales soient réinitialisées. Une solution de contournement serait d'utiliser

Sudo su

puis exécutez la commande qui utilise les variables d’environnement définies.

4
jobin

J'ai ajouté Java_HOME dans le script Tomcat7.service car setenv.sh n'a pas été obtenu par catalina.sh

Étapes:

1. Ouvrez le fichier de script de service Tomcat7

Sudo gedit /etc/init.d/Tomcat7

2.Définissez 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. Démarrer le service Tomcat7

Sudo service Tomcat7 status

0
CᴴᴀZ

La solution que je cherchais se trouve dans /etc/environment qui, comme spécifié à EnvironmentVariables , ne traite pas les scripts et ne développe pas les variables. L'ajout de ce qui suit (without ​​export) a tour:

Java_HOME=/opt/Java/jdk1.8.0_05

Ensuite, j'ai redémarré le système pour que les modifications prennent effet.

0
isapir