Was ist der Unterschied zwischen JAVA_HOME und Update-Alternativen?

12

Ich habe versucht, die beste Möglichkeit zu finden, OpenJDK Java Runtime als Standard-Java für meine Fedora-Box auszuführen und Oracle JDK 6 für die Android-Entwicklung zu verwenden, und zwar zum Ausführen von Android SDK Manager, Android Studio und Eclipse aus dem Android Bundle.

Ich habe OpenJDK Java Runtime aus dem Fedora-Repository installiert, das folgende Einrichtungsalternativen bietet.

[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

Ich habe das Oracle JDK 6 mit der von Oracle bereitgestellten Drehzahl installiert.

Ich könnte Android Bundle und Studio verwenden, um JAVA_HOME unter Oracle JDK auszuführen, indem ich folge .bashrc.

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

Ich habe festgestellt, dass Chrome immer noch OpenJDK verwendet (da ich das Plugin immer noch verknüpfen muss).

Was ist der Unterschied zwischen JAVA_HOME und der Verwendung von Alternativen?

Sudhir Khanger
quelle

Antworten:

11

Alternativen

Alternatives ist ein Tool, mit dem die Speicherorte der installierten Software mithilfe von Links verwaltet werden, die von dem alternativesTool gesteuert werden .

Diese Links werden letztendlich /etc/alternativesmit Zwischenlinks verwaltet $PATH, die normalerweise unter einem Verzeichnis in erstellt werden /usr/bin.

Beispiel

$ 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_HOMEHier kann Software angewiesen werden, mithilfe einer Umgebungsvariablen nachzuschauen. Durch das Hinzufügen zu werden $PATHeinfach die ausführbaren Dateien hinzugefügt, die sich in $JAVA_HOME/binIhrem befinden $PATH. Dies ist manchmal für bestimmte Anwendungen erforderlich.

Die beiden Mechanismen hängen zusammen, können jedoch zusammen oder unabhängig voneinander verwendet werden. Welcher Mechanismus vorzuziehen ist, hängt wirklich von der Java-Anwendung ab.

Was ich mache

Ich verwende es normalerweise $JAVA_HOMEfür einige GUI-Anwendungen, aber im Allgemeinen nur für Serverinstallationen, die beispielsweise Jetty, Tomcat oder JBOSS verwenden.

Für diese Installationen verwalte ich weiterhin alternativesdie Java-Installationen vor dem Einstellen der $JAVA_HOME. Ich mache das gerne so, wenn ich mehrere Java-Installationen haben muss.

Mit Alternativen können Sie bestimmte Tools eine Java-Installation verwenden lassen, während andere Tools eine völlig andere verwenden.

Verweise

slm
quelle
Das Gewinnspiel ist, dass ich mit Alternativen verschiedene Java-Komponenten verwenden kann. Zum Beispiel können Alternativen gesetzt javaund javacaus verschiedenen JDKs auf der anderen Seite JAVA_HOME=JAVALOCATIONweisen darauf java, javacund javawszu java, javacund javawsin JAVALOCATIONjeweils.
Sudhir Khanger
Der Grund, warum ich diese Frage gestellt habe, war, wie ich OpenJDK als Standard-Java-Laufzeit verwenden und Android Studio, Eclipse und SDK Manager dazu bringen kann, Oracle JDK zu verwenden. Ich kann diese drei Programme unter Oracle JDK ausführen, indem ich ihre Startskripte hart bearbeite, die bei einem Update möglicherweise kaputt gehen. Ich habe nach etwas allgemeinerem gesucht STUDIO_JDK, das ich hinzufügen kann ~/.profileoder ~/.bashrcdas von Android Studio zum Aufnehmen von JDK verwendet wird, aber ich denke, Android Bundle (Eclipse und SDK Manager) wird dies nicht berücksichtigen.
Sudhir Khanger
@ Donniezazen - ja STUDIO_JDKist eine benutzerdefinierte Sache. Ich würde Alternativen für diese Tools verwenden und JAVA_HOMEden Pfad festlegen , unter /usr/bindem von verwaltet wird alternatives. Wenn Upgrades durchgeführt werden, alternativesist lediglich eine Änderung erforderlich.
slm
Ich bin nicht sicher, was Sie vorschlagen. Zeigen Sie beide alternativesund JAVA_HOMEzu sagen /usr/bin/java. Auch scheint es wie JAVA_HOMEAußerkraftsetzungen alternatives.
Sudhir Khanger
@donniezazen - Verwenden Sie Alternativen, um Ihre JAVA-Installationen zu verwalten, und verwenden Sie dann JAVA_HOME, indem Sie darauf zeigen /usr/bin. Du hast recht, JAVA_HOMEkannst unabhängig von alternatives.
slm