En Windows, JAVA_HOME
debe apuntar a la carpeta de instalación de JDK (para que JAVA_HOME/bin
contenga todos los ejecutables y JAVA_HOME/libs
contenga todas las jar
bibliotecas predeterminadas ).
Si descargo el paquete JDK de Sun y lo instalo en Linux, es el mismo procedimiento.
Sin embargo, necesito usar el paquete OpenJDK predeterminado de Kubuntu. El problema es que todos los ejecutables se colocan en formato /usr/bin
. Pero los frascos están colocados /usr/share/java
. Como no están en la misma JAVA_HOME
carpeta, tengo problemas con Grails y tal vez haya problemas con otras aplicaciones que esperan la estructura estándar de Java.
Si uso:
JAVA_HOME=/usr
Todas las aplicaciones y scripts que quieran utilizar cualquier ejecutable de Java pueden utilizar el procedimiento estándar
call $JAVA_HOME/bin/executable
. Sin embargo, dado que los frascos están en un lugar diferente, no siempre se encuentran (ejemplo: en griales estoyClassDefNotFound
buscandonative2ascii
).Por otro lado, si uso:
JAVA_HOME=/usr/share/java
Ninguno de los ejecutables de Java (
java
,javac
, etc.) se puede encontrar.
Entonces, ¿cuál es la forma correcta de manejar la JAVA_HOME
variable en un Linux basado en Debian?
Gracias por tu ayuda, Luis
fuente
Si usa alternativas para administrar múltiples versiones de Java, puede configurar el
JAVA_HOME
basado en el enlace simbólico de Java (o javac) de esta manera:export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
fuente
/usr/bin/java
apuntar a un script (/usr/libexec/eselect-java/run-java-tool.bash
). aún así, es un buen enfoque. lo único que cambiaría es usar la sustitución incorporada de Bash para evitar el desovesed
, por ejemplo:JAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
javac
ajava
porque no todo el mundo tiene el JDK instalado; solo el JRELa instalación estándar de Ubuntu parece incluir las distintas versiones de Java
/usr/lib/jvm
. Eljavac
, java que encuentre en su camino se vinculará a esto.No hay ningún problema con instalar su propia versión de Java en cualquier lugar que desee, siempre que configure la
JAVA_HOME
variable de entorno y asegúrese de tener el nuevo Javabin
en su ruta.Una forma sencilla de hacer esto es hacer que la casa de Java exista como un enlace suave, de modo que si desea actualizar o cambiar de versión, solo tenga que cambiar el directorio al que apunta, por ejemplo:
/usr/bin/java --> /opt/jdk/bin/java, /opt/jdk --> /opt/jdk1.6.011
fuente
Normalmente no tengo ninguna variable de entorno JAVA_HOME. Java puede configurarlo por sí mismo. Dentro de java, la propiedad del sistema java.home debería estar disponible.
fuente
Intente configurar la variable JAVA_LIB también.
fuente
Si tiene problemas con los archivos JAR que no se encuentran, también me aseguraría de que su CLASSPATH esté configurada para incluir la ubicación de esos archivos. Sin embargo, encuentro que CLASSPATH a menudo debe configurarse de manera diferente para diferentes programas y, a menudo, termina siendo algo que se configura de manera única para programas individuales.
fuente
La respuesta actualizada que resolverá su problema y también un buen procedimiento general para instalar Oracle Java 7 en Ubuntu se puede encontrar aquí: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
fuente
Descubrí problemas similares con los paquetes openjdk-6-jre y openjdk-6-jre-headless en Ubuntu.
Mi problema se resolvió purgando los paquetes openjdk-6-jre y openjdk-6-jre-headless y volviendo a instalarlos. Las alternativas solo se actualizan en una instalación nueva de los paquetes openjdk-6-jre y openjdk-6-jre-headless.
A continuación se muestra una muestra de la instalación después de la purga:
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. ...
Puede ver arriba que
update-alternatives
se ejecuta para configurar enlaces para los diversos binarios de Java.Después de esta instalación, también hay enlaces
/usr/bin
, enlaces/etc/alternatives
y archivos para cada binario en/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
Comparemos esto con la instalación sin purgar.
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) ... ...
Como ves,
update-alternatives
no se dispara.Después de esta instalación, no hay archivos para los binarios de Java
/var/lib/dpkg/alternatives
, ni enlaces/etc/alternatives
ni enlaces/usr/bin
.La eliminación de los archivos
/var/lib/dpkg/alternatives
también se rompeupdate-java-alternatives
.fuente
Ubuntu 12.04 esto funciona ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre
fuente
Como una actualización para el usuario de fedora, las alternativas establecen el directorio java actual en / usr / java / default
por lo que debe configurar su JAVA_HOME en / usr / java / default para tener siempre la selección actual de alternativas en su classpath
HTH!
fuente
Siempre tiendo a configurar JAVA_HOME de acuerdo con
/usr/bin/java
.JAVA_HOME="$(dirname -- "$(dirname -- "$(readlink -f /usr/bin/java)")")"
De esta forma, ambas alternativas apuntan a la misma ubicación
fuente
Por lo que recuerdo, utilicé el script update-java-alternativas en lugar de update-alternativas. Y configuró JAVA_HOME para mí correctamente.
fuente
Por favor, vea lo que hace el comando de actualización-alternativas (tiene un buen hombre ...).
En breve, ¿qué sucede cuando tienes java-sun-1.4 y java-opensouce-1.0 ... cuál toma "java"? Debian "/ usr / bin / java" es un enlace simbólico y "/usr/bin/java-sun-1.4" es una alternativa a "/ usr / bin / java"
Editar: Como dijo Richard,
update-alternatives
no es suficiente. Realmente necesitas usarupdate-java-alternatives
. Más info en:https://help.ubuntu.com/community/Java
fuente
Mi objetivo correcto siempre ha sido descargarlo de Sun e instalarlo de esa manera. Entonces sabrá exactamente en qué directorio va todo.
Pero si prefiere seguir con la forma extraña en que Debian lo instala, mi mejor suposición sería el directorio padre justo encima de donde se encuentran los binarios java y javac.
(ya que cuando lo especifica en su ruta es $ JAVA_HOME / bin) (Entonces en su caso sería ... $ JAVA_HOME / share y $ JAVA_HOME sería / usr?)
Eh, eso no suena bien ...
¡También me interesa escuchar la respuesta a esto!
fuente