Comment déterminer JAVA_HOME sur Debian / Ubuntu?

95

Sur Ubuntu, il est possible d’avoir plusieurs JVM en même temps. Celui par défaut est sélectionné avec update-alternatives. Mais cela ne définit pas la JAVA_HOMEvariable d'environnement, en raison d'une politique debian .

Je suis en train d'écrire un script de lancement (bash), qui démarre une application java. Cette application java a besoin de la JAVA_HOMEvariable d'environnement. Alors, comment obtenir le chemin de la machine virtuelle actuellement sélectionnée par JVM update-alternatives?

Witek
la source

Réponses:

137

Pour la JRE, quelque chose comme ceci devrait faire l'affaire:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
danadam
la source
17
J'avais besoin de la maison du JDK au lieu de la JRE, mais je l'ai obtenue avec: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") Merci!
Witek
quand j'ai essayé la commande echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), la sortie était /usr/lib/jvm/java-7-oracle/jre/et non/usr/lib/jvm/java-7-oracle/
Sumit Ramteke
Le code donné dans rsaddey fonctionne correctement
Sumit Ramteke le
43

La solution de danadam peut facilement être adoptée pour extraire le chemin JDK (c'est-à-dire pas JRE) selon les besoins:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Recherche le compilateur Java javac (au lieu de java) inclus dans JDK (mais pas JRE).
  • N'a pas de fin / (enlevé par sed s: / bin ... au lieu de s: bin ...)
rsaddey
la source
12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

En .bashrcétait pratique pour moi.

David
la source
9

Donc, vous dites que cette commande ne fait rien pour vous?

sudo update-alternatives --config java 
djangofan
la source
2
Est-ce que c'est supposé paramétrer votre JAVA_HOME? J'ai trouvé que update-java-alternatives est un meilleur moyen de mettre à jour Java, car update-alternatives ne met pas à jour toutes les alternatives liées à Java. Voir le site askubuntu.com/questions/141791
James McMahon le
C'est vrai, mais j'ai rencontré des instances de Linux qui proposaient update-alternatives mais sur lesquelles update-java-alternatives n'était pas installé.
djangofan
3

J'ai installé java avec

sudo apt-get install openjdk-7-jre-headless

et ensuite pour trouver l'emplacement

ls -al /etc/alternatives/java
prule
la source
2

Dans le prolongement des danadams, répondez:

Tout d’abord, installez le deuxième Java JRE en tant que troisième option java, avec la priorité "3":

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Ensuite, vous pouvez les lister:

update-alternatives --list java

Vous pouvez définir l’alternative manuellement en utilisant ceci:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Ensuite, votre script peut le définir à la volée, comme suit:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Cela illustre mieux ce que fait la commande 'sed'. Bien que vous ayez toujours besoin de définir les liens pour javaw et javac, etc., également, chacun séparément.

djangofan
la source
1

Il y a quelque temps, j'ai créé un tutoriel sur le forum Ubuntu sur la procédure d'installation du dernier JRE / JDK à partir du site Web Java. Il explique également comment l'activer à l'échelle du système, en ajoutant l'emplacement JRE / JDK à la variable PATH. Si vous le souhaitez, vous pouvez également ajouter JAVA_HOME au script, mentionné à la fin du sujet.

Découvrez-le: http://ubuntuforums.org/showthread.php?t=1437100

EarthMind
la source
1

Si Java est configuré avec update-alternativesou a été ajouté manuellement à votre variable PATH, aucun codage en dur "/usr/bin/java"n'est nécessaire. J'utilise cette solution dans mon .bashrc:

export JAVA_HOME=$(readlink -m $(which java)/../..)

Freddy
la source