Quelle est la différence entre JAVA_HOME et update-alternatives?

13

J'ai essayé de trouver la meilleure façon d'exécuter OpenJDK Java Runtime en tant que Java par défaut pour ma boîte Fedora et d'utiliser Oracle JDK 6 pour le développement Android, notamment pour exécuter Android SDK Manager, Android Studio et Eclipse à partir d'Android Bundle.

J'ai installé OpenJDK Java Runtime à partir du référentiel Fedora qui a des alternatives de configuration comme suit.

[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

J'ai installé Oracle JDK 6 en utilisant le rpm fourni par Oracle.

Je pourrais faire en sorte qu'Android Bundle et Studio utilisent JAVA_HOME pour fonctionner sous Oracle JDK en restant fidèle .bashrc.

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

J'ai remarqué que Chrome utilise toujours OpenJDK (car j'ai encore besoin de lier le plugin).

Quelle est la différence entre JAVA_HOME et l'utilisation d'alternatives?

Sudhir Khanger
la source

Réponses:

11

Alternatives

Alternatives est un outil qui gérera les emplacements des logiciels installés à l'aide de liens sous le contrôle de l' alternativesoutil.

Ces liens sont finalement gérés sous /etc/alternativesavec des liens intermédiaires créés sous un répertoire dans $PATH, généralement /usr/bin.

Exemple

$ 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_HOMEest l'endroit où l'on peut dire aux logiciels de regarder à travers l'utilisation d'une variable d'environnement. L'ajouter à l ' $PATHajoute simplement les exécutables présents dans $JAVA_HOME/binvotre $PATH. Cela est parfois nécessaire pour certaines applications.

Les 2 mécanismes sont liés mais peuvent être utilisés ensemble ou indépendamment l'un de l'autre, cela dépend vraiment de l'application Java quel mécanisme est préférable.

Ce que je fais

J'utilise généralement $JAVA_HOMEpour certaines applications GUI, mais en général, je ne l'utilise que pour les installations de serveurs qui utilisent Jetty, Tomcat ou JBOSS, par exemple.

Pour ces installations, je continuerai à utiliser alternativespour gérer les installations Java avant de définir le $JAVA_HOME. J'aime le faire de cette façon dans les cas où je pourrais avoir besoin de plusieurs installations de Java.

Alternatives vous permet de faire en sorte que certains outils utilisent une installation de Java tandis que d'autres outils en utilisent une complètement différente.

Les références

slm
la source
Le cadeau est qu'avec des alternatives, je peux utiliser différents composants de Java. Par exemple, des alternatives peuvent définir javaet javacde différentes JDKs d'autre part JAVA_HOME=JAVALOCATIONpointerait java, javacet javawsà java, javacet javawsdans JAVALOCATION, respectivement.
Sudhir Khanger
La raison pour laquelle j'ai posé cette question était de savoir comment utiliser OpenJDK comme Java Runtime par défaut et faire en sorte qu'Android Studio, Eclipse et SDK Manager utilisent Oracle JDK. Je peux exécuter ces trois programmes sous Oracle JDK en modifiant durement leurs scripts de démarrage qui pourraient se casser s'ils sont mis à jour. Je cherchais quelque chose de plus générique comme STUDIO_JDK, que je peux ajouter ~/.profileou ~/.bashrcqui est utilisé par Android Studio pour récupérer JDK, mais je pense que le bundle Android (Eclipse et SDK Manager) n'honorera pas cela.
Sudhir Khanger
@donniezazen - ouais STUDIO_JDKest une chose personnalisée. J'utiliserais des alternatives pour ces outils et définirais JAVA_HOMEle chemin sous /usr/binlequel est géré par alternatives. Lorsque des mises à niveau sont effectuées, il suffit de changer alternatives.
slm
Je ne suis pas sûr de ce que vous proposez. Pointez les deux alternativeset JAVA_HOMEdites /usr/bin/java. Cela ressemble aussi à des JAVA_HOMEremplacements alternatives.
Sudhir Khanger
@donniezazen - oui, utilisez des alternatives pour gérer vos installations JAVA, puis utilisez JAVA_HOME-le en le pointant vers /usr/bin. Vous avez raison, JAVA_HOMEpouvez fonctionner indépendamment de alternatives.
slm