Sous Windows, JAVA_HOME
doit pointer vers le dossier d'installation JDK (afin qu'il JAVA_HOME/bin
contienne tous les exécutables et JAVA_HOME/libs
contienne toutes les jar
bibliothèques par défaut ).
Si je télécharge le bundle JDK de Sun et l'installe sous Linux, c'est la même procédure.
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 bocaux sont placés dedans /usr/share/java
. Comme ils ne sont pas dans le même JAVA_HOME
dossier, j'ai des problèmes avec Grails et peut-être qu'il y aura des problèmes avec d'autres applications qui attendent la structure Java standard.
Si j'utilise:
JAVA_HOME=/usr
Toutes les applications et tous les scripts qui souhaitent utiliser un exécutable Java peuvent utiliser la procédure standard
call $JAVA_HOME/bin/executable
. Cependant, étant donné que les pots sont dans un endroit différent, ils ne sont pas toujours trouvés ( par exemple: dans Grails je deviensClassDefNotFound
pournative2ascii
).Par contre, si j'utilise:
JAVA_HOME=/usr/share/java
Aucun des exécutables Java (
java
,javac
, etc.) se trouve.
Alors, quelle est la manière correcte de gérer la JAVA_HOME
variable dans un Linux basé sur Debian?
Merci pour votre aide, Luis
la source
Si vous utilisez des alternatives pour gérer plusieurs versions de 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::")
la source
/usr/bin/java
pointé vers un script (/usr/libexec/eselect-java/run-java-tool.bash
). encore, c'est une belle approche. la seule chose que je changerais est d'utiliser la substitution intégrée de Bash pour éviter l'apparitionsed
, par exemple:JAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
javac
àjava
car tout le monde a le JDK installé; only the JREL'installation standard d'Ubuntu semble intégrer les différentes versions de Java
/usr/lib/jvm
. Lejavac
java que vous trouverez dans votre chemin sera lié à celui-ci.Il n'y a aucun problème avec l'installation de votre propre version de Java où vous le souhaitez, tant que vous définissez la
JAVA_HOME
variable d'environnement et assurez-vous d'avoir le nouveau Javabin
sur votre chemin.Un moyen simple de le faire est de faire exister le home Java en tant que lien souple, de sorte que si vous souhaitez mettre à niveau ou changer de version, vous n'avez qu'à changer le répertoire vers lequel cela pointe - par exemple:
/usr/bin/java --> /opt/jdk/bin/java, /opt/jdk --> /opt/jdk1.6.011
la source
Je n'ai généralement pas de variable d'environnement JAVA_HOME. Java peut le configurer lui-même. À l'intérieur de java, la propriété système java.home doit être disponible.
la source
Essayez également de définir la variable JAVA_LIB.
la source
Si vous rencontrez des problèmes avec les fichiers JAR introuvables, je vous assurerais également que votre CLASSPATH est configuré pour inclure l'emplacement de ces fichiers. Je trouve cependant que le CLASSPATH doit souvent être réglé différemment pour différents programmes et finit souvent par être quelque chose à définir uniquement pour des programmes individuels.
la source
Une réponse mise à jour qui résoudra votre problème et un bon guide général pour installer Oracle Java 7 sur Ubuntu peut être trouvé ici: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
la source
J'ai découvert des problèmes similaires avec les packages 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-headless et en les réinstallant. Les alternatives ne sont mises à jour que sur une nouvelle installation des packages openjdk-6-jre et openjdk-6-jre-headless.
Voici un exemple d'installation après 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 qui
update-alternatives
est exécuté pour configurer des liens pour les différents binaires Java.Après cette installation, il existe également 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
Contestons cela 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-alternatives
n'est pas déclenché.Après cette installation, il n'y a aucun fichier pour les binaires Java dans
/var/lib/dpkg/alternatives
, aucun lien dans/etc/alternatives
et aucun lien dans/usr/bin
.La suppression des fichiers est
/var/lib/dpkg/alternatives
également interrompueupdate-java-alternatives
.la source
Ubuntu 12.04 cela fonctionne ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre
la source
En tant que mise à jour pour l'utilisateur 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 actuelle dans votre chemin de classe
HTH!
la source
J'ai toujours tendance à définir JAVA_HOME selon le
/usr/bin/java
.JAVA_HOME="$(dirname -- "$(dirname -- "$(readlink -f /usr/bin/java)")")"
De cette façon, les deux alternatives pointent vers le même emplacement
la source
Autant que je me souvienne, j'ai utilisé le script update-java-alternatives au lieu des update-alternatives. Et il a défini le JAVA_HOME pour moi correctement.
la source
Veuillez voir ce que fait la commande update-alternatives (elle a un homme sympa ...).
En bref - que se passe-t-il lorsque vous avez 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"
Edit: Comme l'a dit Richard, ce
update-alternatives
n'est pas suffisant. Vous devez en fait utiliserupdate-java-alternatives
. Plus d'infos sur:https://help.ubuntu.com/community/Java
la source
Ma bonne cible 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 à la manière étrange dont Debian l'installe, ma meilleure estimation serait le répertoire parent juste au-dessus de l'emplacement des binaires java et javac.
(puisque lorsque 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é d'entendre la réponse à cela!
la source