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é?
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:
setenv.sh
dans le dossier CATALINA_BASE/bin
, s'il n'existe pas déjà.Ajouter cette ligne à setenv.sh
export Java_HOME=/opt/Java/jdk1.8.0_05
Rendez-le exécutable.
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.
Puisque vous avez défini la variable d'environnement pour votre propre utilisateur et non pour le superutilisateur, vous avez deux options:
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.
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.
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
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.