¿Cuál es la diferencia entre JAVA_HOME y las alternativas de actualización?

13

He estado tratando de encontrar la mejor manera de ejecutar OpenJDK Java Runtime como Java predeterminado para mi caja Fedora y usar Oracle JDK 6 para el desarrollo de Android, es decir, para ejecutar Android SDK Manager, Android Studio y Eclipse desde Android Bundle.

Instalé OpenJDK Java Runtime desde el repositorio de Fedora que tiene las siguientes opciones de configuración.

[donnie@fedora ~]$ alternatives --list | grep java
jre_openjdk             auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
jre_1.7.0               auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
java                    auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre/bin/java
libjavaplugin.so.x86_64 auto    /usr/lib64/IcedTeaPlugin.so

He instalado Oracle JDK 6 usando las rpm proporcionadas por Oracle.

Podría hacer que Android Bundle y Studio hagan uso de JAVA_HOME para ejecutarse bajo Oracle JDK al seguirlo .bashrc.

export JAVA_HOME=/usr/java/jdk1.6.0_45/
export PATH=$JAVA_HOME/bin:$PATH

Noté que Chrome todavía usa OpenJDK (ya que todavía necesito vincular el complemento).

¿Cuál es la diferencia entre JAVA_HOME y el uso de alternativas?

Sudhir Khanger
fuente

Respuestas:

11

Alternativas

Alternatives es una herramienta que administrará las ubicaciones del software instalado utilizando enlaces bajo el control de la alternativesherramienta.

Estos enlaces se gestionan en última instancia /etc/alternativescon enlaces intermedios creados en un directorio $PATH, por lo general /usr/bin.

Ejemplo

$ ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 Feb 24 17:36 /usr/bin/java -> /etc/alternatives/java

$ ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Feb 24 17:36 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.0.fc19.x86_64/jre/bin/java

$ JAVA_HOME

$JAVA_HOMEes donde se le puede decir al software que mire a través del uso de una variable de entorno. Agregarlo al $PATHsimplemente agrega los ejecutables presentes en $JAVA_HOME/binsu $PATH. Esto a veces es necesario para ciertas aplicaciones.

Los 2 mecanismos están relacionados, pero se pueden usar juntos o de forma independiente, realmente depende de la aplicación Java qué mecanismo es preferible.

Lo que hago

Normalmente lo uso $JAVA_HOMEpara algunas aplicaciones GUI, pero en general lo uso solo para instalaciones de servidores que utilizan Jetty, Tomcat o JBOSS, por ejemplo.

Para estas instalaciones aún lo usaré alternativespara administrar las instalaciones de Java antes de configurar $JAVA_HOME. Me gusta hacerlo de esta manera en los casos en que necesite tener múltiples instalaciones de Java.

Alternatives le permite que ciertas herramientas usen una instalación de Java, mientras que otras herramientas usan una completamente diferente.

Referencias

slm
fuente
El regalo es que con alternativas puedo usar diferentes componentes de Java. Por ejemplo, Alternatives puede establecer javay javacde diferentes JDK por otro lado JAVA_HOME=JAVALOCATIONapuntaría java, javacy javawsa java, javacy javawsen JAVALOCATION, respectivamente.
Sudhir Khanger
La razón por la que hice esta pregunta fue cómo puedo usar OpenJDK como Java Runtime predeterminado y hacer que Android Studio, Eclipse y SDK Manager usen Oracle JDK. Puedo ejecutar esos tres programas en Oracle JDK editando duro sus scripts de inicio que podrían romperse si se actualizan. Estaba buscando algo más genérico como STUDIO_JDK, que puedo agregar ~/.profileo ~/.bashrcque Android Studio utiliza para elegir JDK, pero creo que Android Bundle (Eclipse y SDK Manager) no lo aceptará.
Sudhir Khanger
@donniezazen: sí, STUDIO_JDKes algo personalizado. Usaría alternativas para esas herramientas y establecería JAVA_HOMEel camino bajo el /usr/bincual es administrado por alternatives. Cuando se realizan actualizaciones, el cambio alternativeses todo lo que se requiere.
slm
No estoy seguro de lo que estás proponiendo. Señalar ambos alternativesy JAVA_HOMEdecir /usr/bin/java. También parece JAVA_HOMEanulación alternatives.
Sudhir Khanger
@donniezazen: sí, use alternativas para administrar sus instalaciones de JAVA y luego úselas JAVA_HOME, apuntándolas /usr/bin. Tienes razón, JAVA_HOMEpuedes operar independientemente de alternatives.
slm