Qual è la differenza tra JAVA_HOME e le alternative di aggiornamento?


13

Ho cercato di capire il modo migliore per eseguire OpenJDK Java Runtime come Java predefinito per la mia casella Fedora e utilizzare Oracle JDK 6 per lo sviluppo Android, in particolare per eseguire Android SDK Manager, Android Studio ed Eclipse dal pacchetto Android.

Ho installato OpenJDK Java Runtime dal repository Fedora che ha alternative di installazione come segue.

[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

Ho installato Oracle JDK 6 utilizzando l'rpm fornito da Oracle.

Potrei fare in modo che Android Bundle e Studio facciano uso di JAVA_HOME per funzionare con Oracle JDK attenendosi al seguito .bashrc.

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

Ho notato che Chrome utilizza ancora OpenJDK (poiché devo ancora collegare il plug-in).

Qual è la differenza tra JAVA_HOME e l'utilizzo di alternative?

Risposte:


11

alternative

Alternatives è uno strumento che gestirà le posizioni del software installato utilizzando collegamenti sotto il controllo dello alternativesstrumento.

Questi collegamenti sono in definitiva gestiti /etc/alternativescon collegamenti intermedi creati in una directory in $PATH, in genere /usr/bin.

Esempio

$ 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_HOMEè dove si può dire al software di guardare attraverso l'uso di una variabile d'ambiente. Aggiungendolo a $PATHsemplicemente aggiunge gli eseguibili presenti nel $JAVA_HOME/bintuo $PATH. Questo è talvolta necessario per alcune applicazioni.

I 2 meccanismi sono correlati ma possono essere usati insieme o indipendentemente l'uno dall'altro, dipende davvero dall'applicazione Java quale meccanismo è preferibile.

Quello che faccio

Di solito lo uso $JAVA_HOMEper alcune applicazioni con interfaccia grafica, ma in generale lo uso solo per installazioni di server che utilizzano Jetty, Tomcat o JBOSS, ad esempio.

Per queste installazioni userò ancora alternativesper gestire le installazioni Java prima di impostare il $JAVA_HOME. Mi piace farlo in questo modo nei casi in cui potrebbe essere necessario disporre di più installazioni di Java.

Le alternative ti consentono di avere alcuni strumenti che usano un'installazione di Java mentre altri strumenti ne usano una completamente diversa.

Riferimenti


L'omaggio è che con le alternative posso usare diversi componenti di Java. Ad esempio, Alternative può impostare javae javacda diverse JDK invece JAVA_HOME=JAVALOCATIONindicherebbe java, javace javawsda java, javace javawsin JAVALOCATION, rispettivamente.
Sudhir Khanger,

Il motivo per cui ho posto questa domanda è come posso usare OpenJDK come Java Runtime predefinito e far sì che Android Studio, Eclipse e SDK Manager utilizzino Oracle JDK. Posso eseguire questi tre programmi con Oracle JDK modificando a fondo i loro script di avvio che potrebbero rompersi se vengono aggiornati. Stavo cercando qualcosa di più generico STUDIO_JDK, che posso aggiungere ~/.profileo ~/.bashrcutilizzato da Android Studio per raccogliere JDK, ma penso che Android Bundle (Eclipse e SDK Manager) non lo onorerà.
Sudhir Khanger,

@donniezazen - yeah STUDIO_JDKè una cosa personalizzata. Vorrei usare alternative per quegli strumenti e impostare JAVA_HOMEil percorso in /usr/bincui è gestito alternatives. Quando vengono eseguiti gli aggiornamenti, alternativesè sufficiente cambiare .
slm

Non sono sicuro di ciò che stai proponendo. Indica entrambi alternativese JAVA_HOMEdire /usr/bin/java. Inoltre sembra che JAVA_HOMEle sostituzioni alternatives.
Sudhir Khanger,

@donniezazen: sì, usa alternative per gestire le tue installazioni JAVA e poi usa JAVA_HOME, puntandolo a /usr/bin. Hai ragione, JAVA_HOMEpuoi operare indipendentemente da alternatives.
slm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.