java - restaurar - variables de entorno linux
¿Cuál es el objetivo correcto para la variable de entorno JAVA_HOME para una distribución Linux OpenJDK basada en Debian? (13)
Como una actualización para el usuario de Fedora, las alternativas establecen el directorio actual de Java en / usr / java / default
por lo tanto, debe configurar su JAVA_HOME en / usr / java / default para tener siempre opciones alternativas de selección en su classpath
HTH!
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 bibliotecas jar
defecto).
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 /usr/bin
. Pero los frascos se colocan en /usr/share/java
. Como no están en la misma carpeta JAVA_HOME
, tengo problemas con Grails y tal vez haya problemas con otras aplicaciones que esperan la estructura Java estándar.
Si uso:
JAVA_HOME=/usr
Todas las aplicaciones y scripts que quieran usar cualquier ejecutable Java pueden usar 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 (por ejemplo: enClassDefNotFound
native2ascii
ClassDefNotFound
paranative2ascii
).Por otro lado, si uso:
JAVA_HOME=/usr/share/java
Ninguno de los ejecutables Java (
java
,javac
, etc.) se puede encontrar.
Entonces, ¿cuál es la forma correcta de manejar la variable JAVA_HOME
en un Linux basado en Debian?
Gracias por tu ayuda, Luis
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 reinstalando. Las alternativas solo se actualizan en una nueva instalación 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 en /usr/bin
, enlaces en /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
Vamos a contar 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 puede ver, update-alternatives
no se activan.
Después de esta instalación, no hay archivos para los binarios de Java en /var/lib/dpkg/alternatives
, no hay enlaces en /etc/alternatives
, y no hay enlaces en /usr/bin
.
La eliminación de los archivos en /var/lib/dpkg/alternatives
también rompe update-java-alternatives
.
Intenta configurar la variable JAVA_LIB también.
La instalación estándar de Ubuntu parece poner las diversas versiones de Java en /usr/lib/jvm
. El javac
, java que encuentres en tu camino, se enlazará a esto.
No hay problema con la instalación de su propia versión de Java en cualquier lugar que desee, siempre y cuando configure la variable de entorno JAVA_HOME
y asegúrese de tener el nuevo bin
Java en su ruta.
Una forma simple de hacer esto es hacer que la casa de Java exista como enlace de software, de modo que si desea actualizar o cambiar versiones solo tiene que cambiar el directorio al que apunta, por ejemplo:
/usr/bin/java --> /opt/jdk/bin/java,
/opt/jdk --> /opt/jdk1.6.011
La respuesta actualizada que resolverá su problema y también un buen resumen general de cómo instalar Oracle Java 7 en Ubuntu se puede encontrar aquí: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
Lo que finalmente funcionó para mí (Grails ahora funciona sin problemas) está haciendo casi lo mismo que Steve B. ha señalado:
JAVA_HOME=/usr/lib/jvm/default-java
De esta forma, si el usuario cambia el JDK predeterminado para el sistema, JAVA_HOME
aún funciona.
default-java
es un enlace simbólico a la JVM actual.
Mi objetivo correcto siempre ha sido descargarlo de Sun y simplemente instalarlo de esa manera. Entonces sabes exactamente en qué directorio está todo.
Pero si prefieres seguir con la extraña forma en que Debian lo instala, mi mejor opción sería el directorio principal justo arriba, 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 / compartir y $ JAVA_HOME sería / usr?)
Eh, eso no suena bien ...
¡Estoy interesado en escuchar la respuesta a esto también!
Normalmente no tengo ninguna variable de entorno JAVA_HOME. Java puede configurarlo por sí mismo. Dentro de la propiedad del sistema Java java.home debería estar disponible.
Por favor, vea qué hace el comando update-alternatives (tiene un buen hombre ...).
En breve, ¿qué ocurre cuando tienes java-sun-1.4 y java-opensouce-1.0 ... cuál de ellos 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 necesita usar update-java-alternatives
. Más información en:
Por lo que recuerdo, utilicé el script update-java-alternatives en lugar de las alternativas de actualización. Y configuró el JAVA_HOME para mí correctamente.
Si tiene problemas con los archivos JAR que no se encuentran, también me aseguraré de que su CLASSPATH esté configurada para incluir la ubicación de esos archivos. Sin embargo, sí encuentro que CLASSPATH a menudo necesita establecerse de manera diferente para diferentes programas y, a menudo, termina siendo algo para establecer de forma única para programas individuales.
Si usa alternativas, puede establecer el JAVA_HOME
basado en el enlace simbólico de Java de esta manera:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
Ubuntu 12.04 esto funciona ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre