Un moyen à l'échelle du système de définir ou d'obtenir $ JAVA_HOME dans Ubuntu?

8

Je me demande si Ubuntu lui-même fournit un moyen à l'échelle du système de trouver le courant JAVA_HOMEou s'il y a un bon endroit pour le réglage JAVA_HOME.

Mac OS X s'en sort bien, car la /usr/libexec/java_homecommande renvoie le courant JAVA_HOME. Mais pour Ubuntu, les documents que j'ai trouvés m'ont toujours dit de définir le $JAVA_PATHpointage sur un chemin statique, qui est stocké dans ~/.bash_profile.

Je pense cependant que cette approche présente plusieurs inconvénients:

  1. Une fois Java mis à jour, le mini numéro de version changera, ce qui rendra le chemin statique plus disponible.
  2. Après avoir changé le JRE utilisé dans mon système avec update-alternatives, je dois modifier $JAVA_HOMEen .bash_profile. Ce travail supplémentaire est ennuyeux.
  3. Certains $JAVA_HOMEprogrammes obligatoires ne sont pas du .bash_profiletout au courant . Je dois définir $JAVA_HOMEleur script de démarrage, donc un moyen standard et facile à obtenir me $JAVA_HOMEsemble essentiel.

Eh bien, tout conseil est le bienvenu. Merci.

Jianwen W.
la source

Réponses:

6

Un peu hacky, mais mettez cette ligne dans votre /etc/profilepour la définir à l'échelle du système:

export JAVA_HOME=$(dirname $(dirname $(readlink -e /usr/bin/javac)))

la source
Certains administrateurs système aiment jouer avec le PATH, donc / usr / bin n'est pas nécessairement le premier endroit recherché. Pour être sûr que vous prenez le chemin de la version que vous allez réellement exécuter, un meilleur hack peut être: export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
SimonB
cela fonctionne si le chemin existe. Existe-t-il un moyen de le rendre silencieux sur les systèmes qui n'ont pas Java?
gréggle
comment faire cela sur Mac? "readlink -e" ne fonctionne pas.
Artanis Zeratul
1

Vous pouvez définir des variables d'environnement dans /etc/environment, qui sont configurées par PAM. Il devrait également y avoir des liens symboliques /usr/lib/jvmqui ne changent pas avec les versions mineures.

JAVA_HOME=/usr/lib/jvm/java-6-sun
mgorven
la source
0

Définir le profil du système de chemin

Modifiez le fichier de chemin d'accès système / etc / profile

sudo gedit /etc/profile

Ajouter les lignes suivantes à la fin

JAVA_HOME=/usr/lib/jvm/jdk1.7.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

Pour http://javaandme.com/ pour le guide d'installation complet.

Pratap Singh
la source
0

Si vous êtes sûr que la commande «java» peut être appelée, cela ne fonctionnerait-il pas pour vous?

export JAVA_HOME=$(dirname $(java -XshowSettings:properties -version 2>&1 | grep 'java\.home' | awk '{ print $3 }'))
mlvnd
la source
L'OP cherche un moyen de définir l'ensemble du $JAVA_HOMEsystème, pas seulement dans le shell actuel.
Celada
0

La solution acceptée byuser13742 suppose que Java est définitivement installé sur le serveur. Dans le cas où vous ajoutez ceci à un script centralisé pour de nombreux serveurs, cela donnera des erreurs comme:

dirname: missing operand
Try 'dirname --help' for more information.

Pour éviter cela et ne définir JAVA_HOME que si le serveur dispose d'un environnement Java, une légère amélioration est:

if [ -f "$(which javac)" ]; then
    export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
fi

J'ai également intégré le changement de SimonB à utiliser whichpour trouver où se trouve l'installation.

greggles
la source
Puis-je mettre cela /etc/environment?
Jin Kwon