web-dev-qa-db-fra.com

Quelle est la cible correcte pour la variable d’environnement Java_HOME pour une distribution Linux OpenJDK Debian?

Sous Windows, Java_HOME doit pointer vers le dossier d’installation du JDK (pour que Java_HOME/bin contient tous les exécutables et Java_HOME/libs contient toutes les bibliothèques jar par défaut).

Si je télécharge le kit JDK de Sun et l'installe sous Linux, la procédure est identique.

Cependant, je dois utiliser le paquet OpenJDK par défaut de Kubuntu. Le problème est que tous les exécutables sont placés dans /usr/bin. Mais les pots sont placés dans /usr/share/Java. Comme ils ne sont pas sous le même Java_HOME dossier J'ai des problèmes avec Grails et peut-être avec d'autres applications qui attendent la structure standard Java.

  1. Si j'utilise:

    Java_HOME=/usr
    

    Toutes les applications et tous les scripts souhaitant utiliser un exécutable Java) peuvent utiliser la procédure standard call $Java_HOME/bin/executable. Cependant, comme les bocaux sont dans un endroit différent, ils ne sont pas toujours trouvés (exemple: dans Grails, je reçois ClassDefNotFound pour native2ascii).

  2. Par contre, si j'utilise:

    Java_HOME=/usr/share/Java
    

    Aucun des exécutables Java (Java, javac, etc.) ne peut être trouvé.

Alors, quelle est la bonne façon de gérer le Java_HOME variable dans un Linux basé sur Debian?

Merci pour votre aide, Luis

82
Luis Soeiro

Ce qui a finalement fonctionné pour moi (Grails fonctionne maintenant sans heurts) se déroule presque comme l'a souligné Steve B.:

Java_HOME=/usr/lib/jvm/default-Java

Ainsi, si l’utilisateur modifie le JDK par défaut pour le système, Java_HOME fonctionne encore.

default-Java est un lien symbolique vers la JVM actuelle.

91
Luis Soeiro

Si vous utilisez des alternatives pour gérer plusieurs versions Java, vous pouvez définir le Java_HOME basé sur le lien symbolique Java (ou javac) comme ceci:

export Java_HOME=$(readlink -f /usr/bin/Java | sed "s:bin/Java::")
64
bbaassssiiee

L’installation standard d’Ubuntu semble mettre les différentes Java dans /usr/lib/jvm. Le javac, Java que vous trouvez dans votre chemin d'accès sera un lien symbolique vers ceci.

Il n’ya aucun problème à installer votre propre Java où que vous soyez, à condition de définir le Java_HOME variable d’environnement et assurez-vous d’avoir la nouvelle Java bin sur votre chemin.

Un moyen simple de le faire est d’avoir le répertoire Java home sous forme de lien symbolique). Ainsi, si vous souhaitez mettre à niveau ou changer de version, il vous suffit de changer le répertoire vers lequel cela pointe - par exemple:

/usr/bin/Java --> /opt/jdk/bin/Java,

/opt/jdk --> /opt/jdk1.6.011
5
Steve B.

Essayez également de définir la variable Java_LIB.

0
Cantillon

En tant que mise à jour pour les utilisateurs de Fedora, les alternatives définissent le répertoire current Java sur/usr/Java/default

vous devez donc définir votre Java_HOME sur/usr/Java/default pour toujours avoir des alternatives de sélection courante dans votre chemin de classe

HTH!

0
Greg Henry

Si vous rencontrez des problèmes avec des fichiers JAR non trouvés, assurez-vous également que votre CLASSPATH est configuré pour inclure l'emplacement de ces fichiers. Je trouve cependant que CLASSPATH doit souvent être configuré différemment pour différents programmes et finit souvent par être un élément à définir uniquement pour des programmes individuels.

0
MVang

Autant que je m'en souvienne, j'ai utilisé le script update-Java-alternatives à la place de update-alternatives. Et cela a correctement défini Java_HOME.

0
Tobias Schulte

J'ai découvert des problèmes similaires avec les paquets openjdk-6-jre et openjdk-6-jre-headless dans Ubuntu.

Mon problème a été résolu en purgeant les paquets openjdk-6-jre et openjdk-6-jre-head et en les réinstallant. Les alternatives ne sont mises à jour que lors d'une nouvelle installation des packages openjdk-6-jre et openjdk-6-jre-headless.

Vous trouverez ci-dessous un exemple d'installation après la purge:

aptitude purge openjdk-6-jre openjdk-6-jre-headless # to ensure no configuration exists
aptitude install --without-recommends openjdk-6-jre # Installing without some extras
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
  ca-certificates-Java{a} Java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a}
  openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-Java{a}
The following packages are RECOMMENDED but will NOT be installed:
  icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra
0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded.
Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Selecting previously deselected package openjdk-6-jre-lib.
(Reading database ... 62267 files and directories currently installed.)
Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ...
...
Processing triggers for man-db ...
Setting up tzdata-Java (2012e-0ubuntu0.10.04) ...
...
Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ...
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/Java to provide /usr/bin/Java (Java) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode.
Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ...
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/policytool to provide /usr/bin/policytool (policytool) in auto mode.
...

Vous pouvez voir ci-dessus que update-alternatives est exécuté pour configurer des liens pour les divers binaires Java.

Après cette installation, il y a aussi des liens dans /usr/bin, liens dans /etc/alternatives, et les fichiers pour chaque binaire dans /var/lib/dpkg/alternatives.

ls -l /usr/bin/Java /etc/alternatives/Java /var/lib/dpkg/alternatives/Java
lrwxrwxrwx 1 root root  40 2013-01-16 14:44 /etc/alternatives/Java -> /usr/lib/jvm/Java-6-openjdk/jre/bin/Java
lrwxrwxrwx 1 root root  22 2013-01-16 14:44 /usr/bin/Java -> /etc/alternatives/Java
-rw-r--r-- 1 root root 158 2013-01-16 14:44 /var/lib/dpkg/alternatives/Java

Voyons cela en installant sans purger.

aptitude remove openjdk-6-jre
aptitude install --without-recommends openjdk-6-jre
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
  ca-certificates-Java{a} Java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a}
  openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-Java{a}
The following packages are RECOMMENDED but will NOT be installed:
  icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra
0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded.
Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Selecting previously deselected package openjdk-6-jre-lib.
(Reading database ... 62293 files and directories currently installed.)
Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ...
...
Processing triggers for man-db ...
...
Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ...

Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ...
...

Comme tu vois, update-alternatives n'est pas déclenché.

Après cette installation, il n’ya plus de fichiers pour les binaires Java dans /var/lib/dpkg/alternatives, pas de liens dans /etc/alternatives, et pas de liens dans /usr/bin.

La suppression des fichiers dans /var/lib/dpkg/alternatives casse aussi update-Java-alternatives.

0
Saturn Junction

Ubuntu 12.04 ça marche ...

Java_HOME =/usr/lib/jvm/Java-6-openjdk-i386/jre

0
Alex

Réponse mise à jour qui résoudra votre problème, ainsi qu’un guide pratique général pour installer Oracle Java 7 sur Ubuntu, disponible ici: http://www.wikihow.com./Install-Oracle-Java-sur-Ubuntu-Linux

0
Jack

Je n'ai généralement pas de variable d'environnement Java_HOME. Java peut le configurer lui-même. À l'intérieur Java java.home devrait être disponible.

0
iny