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

StackOverflow https://stackoverflow.com/questions/663658

Question

Sous Windows, JAVA_HOME doit pointer sur le dossier d'installation du JDK (pour que JAVA_HOME/bin contienne tous les exécutables et JAVA_HOME/libs 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 package 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. Puisqu'ils ne se trouvent pas dans le même dossier call $JAVA_HOME/bin/executable, j'ai des problèmes avec Grails et peut-être aussi avec d'autres applications qui attendent la structure Java standard.

  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 ClassDefNotFound. Cependant, comme les bocaux sont dans un endroit différent, ils ne sont pas toujours trouvés (exemple: dans Grails, je reçois native2ascii pour java).

  2. Par contre, si j'utilise:

    JAVA_HOME=/usr/share/java
    

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

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

Merci pour votre aide, Luis

Était-ce utile?

La solution

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 toujours.

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

Autres conseils

Si vous utilisez des alternatives pour gérer plusieurs versions de Java, vous pouvez définir le JAVA_HOME en fonction du java (ou du javac) lié symboliquement comme suit:

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

L'installation standard d'Ubuntu semble mettre les différentes versions de Java dans /usr/lib/jvm. Le javac, java que vous trouvez dans votre chemin va softlink à ceci.

L'installation de votre propre version de Java, où que vous soyez, ne pose aucun problème, à condition de définir la JAVA_HOME variable d'environnement et de vous assurer que la nouvelle version de Java bin figure dans votre chemin.

Un moyen simple de le faire consiste à faire en sorte que le répertoire principal Java soit un 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

Je n'ai généralement pas de variable d'environnement JAVA_HOME. Java peut le configurer lui-même. Dans la propriété système java java.home devrait être disponible.

Essayez de définir également la variable JAVA_LIB.

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 pour moi.

Si vous rencontrez des problèmes en raison de l'absence de fichiers JAR, assurez-vous également que votre CLASSPATH est configuré pour inclure l'emplacement de ces fichiers. Cependant, j'estime 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.

La réponse mise à jour qui résoudra votre problème, ainsi qu’un guide pratique pour installer Oracle Java 7 sur Ubuntu peuvent être trouvés ici: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux

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 packages 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 différents fichiers binaires Java.

Après cette installation, il y a aussi des liens dans /usr/bin, des liens dans /etc/alternatives et des 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

Mettons cela de côté avec l'installation sans purge.

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 vous le voyez, update-java-alternatives n'est pas déclenché.

Après cette installation, il n'y a plus de fichiers pour les fichiers binaires Java dans <=>, pas de liens dans <=> et pas de liens dans <=>.

La suppression des fichiers dans <=> interrompt également <=>.

Ubuntu 12.04 cela fonctionne ...

JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre

Comme alternative pour les utilisateurs de Fedora, les alternatives définissent le répertoire Java actuel 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!

Mon objectif correct a toujours été de le télécharger à partir de Sun et de l'installer de cette façon. Ensuite, vous savez exactement dans quel répertoire tout se trouve.

Mais si vous préférez vous en tenir à l’installation étrange de Debian, ma meilleure hypothèse serait le répertoire parent situé juste au-dessus, où se trouvent les binaires java et javac.

(depuis quand vous le spécifiez dans votre chemin c'est $ JAVA_HOME / bin) (Donc, dans votre cas, ce serait ... $ JAVA_HOME / share et $ JAVA_HOME serait / usr?)

Eh, ça ne sonne pas bien ...

Je suis également intéressé par la réponse à cette question!

Veuillez voir ce que fait la commande update-alternatives (elle a un homme gentil ...).

En bref, que se passe-t-il lorsque vous utilisez java-sun-1.4 et java-opensouce-1.0 ... lequel prend & "; java &"; Il debian & "; / Usr / bin / java &"; est un lien symbolique et & "; /usr/bin/java-sun-1.4 &"; est une alternative à & "; / usr / bin / java &";

Modifier: Comme l'a dit Richard, update-alternatives n'est pas suffisant. Vous devez réellement utiliser update-java-alternatives. Plus d'infos sur:

https://help.ubuntu.com/community/Java

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top