Wechseln Sie zwischen mehreren Java-Versionen

65

Während der Installation von Android Studio unter Ubuntu 14.04 erhalte ich die Meldung, dass meine Java-Version ( javac 1.7.0_79) Probleme verursacht. Ich habe eine Lösung gefunden, wie man eine neuere Oracle-Version von Java installiert:

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Ich befürchte jedoch, dass dies meine vorhandene open-jdkJava-Version überschreibt . Da ich nicht weiß, welches meiner Programme von Java abhängt, befürchte ich, dass dies diese anderen Programme zum Absturz bringen könnte.

Gibt es eine Möglichkeit, um sicherzustellen, dass apt-getmein vorheriges Java nicht überschrieben wird? Grundsätzlich möchte ich beide installiert haben und in der Lage sein, manuell zwischen ihnen zu wechseln, je nachdem, welche Version ich benötige.

mcExchange
quelle

Antworten:

83

Apt-get überschreibt die vorhandenen Java-Versionen nicht.

Verwenden Sie den update-java-alternativesBefehl, um zwischen installierten Java-Versionen zu wechseln .

Alle Java-Versionen auflisten:

update-java-alternatives --list

Java-Version als Standard festlegen (Root-Berechtigungen erforderlich):

sudo update-java-alternatives --set /path/to/java/version

... wo /path/to/java/versionist einer der im vorherigen Befehl aufgelisteten (zB /usr/lib/jvm/java-7-openjdk-amd64).


Zusätzliche Information:

update-java-alternativesist ein Convenience - Tool , das von Debian verwendet Alternatives System ( update-alternativeseine Reihe von Links zu der angegebenen Java - Version (zB eingestellt) java, javac, ...).

Tanzel
quelle
1
Für mich führte dies dazu, dass die Java-Version java8 war, aber JAVA_HOME war immer noch auf 7 :(
Nenotlep
Dies löst auch mein Problem. @Nenotlep Ich habe die Umgebungsvariable manuell entweder in .bashrc oder / etc / environment
nuttynibbles bearbeitet.
update-java-alternativeswar nicht für mich verfügbar. Ich habe diesen Befehl durch ersetzt update-alternatives java.
Nofinator
@nofinator, der nur die javaausführbare Datei betrifft . Welche Ubuntu-Version benutzt du?
Tanzel
1
@Nenotlep, um zu ändern JAVA_HOME, müssen Sie den folgenden Befehl source /etc/environment
ausführen
48

Verwenden

sudo update-alternatives --config java

Hier werden alle installierten Versionen aufgelistet, bei denen die derzeit aktive markiert ist, und es wird ein Dialog zum Wechseln angezeigt:

There are 3 choices for the alternative java (providing /usr/bin/java).

Selection    Path...
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-oracle/bin/java...
* 1            /usr/lib/jvm/java-7-oracle/jre/bin/java...
  2            /usr/lib/jvm/java-8-oracle/jre/bin/java...
  3            /usr/lib/jvm/java-9-oracle/bin/java...

Press <enter> to keep...[*], or type selection number: 

Verwenden

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

um die $JAVA_HOMEaktuell aktive Version einzustellen

muet
quelle
Wie @danzel bei der akzeptierten Antwort feststellt, betrifft dies nur die javaausführbare Datei, nicht die anderen Teile der Konfiguration. Verwenden Sie, update-java-alternativesfalls verfügbar.
Premek Brada
4

Basierend auf der Antwort von @muet fand ich, dass dies nahtlos funktioniert:

Fügen Sie dies hinzu zu ~/.bashrc:

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

Alias ​​hinzufügen:

alias useJava8='yes | sudo apt-get install oracle-java8-set-default && source ~/.bashrc'
alias useJava7='yes | sudo apt-get install oracle-java7-set-default && source ~/.bashrc'

Dann können Sie innerhalb derselben Shell nur mit: useJava7oder wechselnuseJava8

brianjohnsen
quelle
um Aliase dauerhaft zu machen, kann man sie in ~ / .bashrc setzen, mehr Infos hier askubuntu.com/questions/17536/…
Konstantin Zyubin
E: Paket oracle-java7-set-default kann nicht gefunden werden
Prakash Pandey
Die eindeutig einfachste Möglichkeit zum Installieren, Verwenden und Wechseln zwischen verschiedenen Java-Versionen ist die Verwendung von SDKMAN! Siehe hier: sdkman.io/usage.html
brianjohnsen
vor kurzem auf einen anderen Befehl gestoßen, um das JAVA_HOME zu setzen, aber noch .bashrcexport JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
anzuprobieren
3

Java konfigurieren

Sie können konfigurieren, welche Version standardmäßig in der Befehlszeile verwendet wird, indem Sie festlegen update-alternatives, welche symbolischen Links für verschiedene Befehle verwendet werden.

sudo update-alternatives --config java

Die Ausgabe sieht ungefähr so ​​aus.

There are 5 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-6-oracle/jre/bin/java          1         manual mode
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          2         manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  4            /usr/lib/jvm/java-8-oracle/jre/bin/java          3         manual mode
  5            /usr/lib/jvm/java-9-oracle/bin/java              4         manual mode

Press <enter> to keep the current choice[*], or type selection number:

Sie können nun die Nummer auswählen, die als Standard verwendet werden soll. Dies kann auch für andere Java-Befehle wie Compiler ( javac), Dokumentationsgenerator ( javadoc), JAR-Signiertool ( jarsigner) usw. erfolgen. Sie können den folgenden Befehl verwenden, in dem Füllen Befehl Sie anpassen möchten.

sudo update-alternatives --config command

Einstellen des JAVA_HOMEUmgebungsvariable

Viele Programme, z. B. Java-Server, verwenden die Umgebungsvariable JAVA_HOME, um den Java-Installationsort zu bestimmen.

Kopieren Sie den Pfad von Ihrer bevorzugten Installation und öffnen Sie dann / etc / environment mit Sublime Text oder Ihrem bevorzugten Texteditor.

sudo subl /etc/environment

Fügen Sie am Ende dieser Datei die folgende Zeile hinzu und achten Sie darauf, den markierten Pfad durch Ihren eigenen kopierten Pfad zu ersetzen.

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Speichern und schließen Sie die Datei und laden Sie diese: source /etc/environment.
Sie können nun testen , ob die Umgebungsvariable durch Ausführen des folgenden Befehls festgelegt: echo $JAVA_HOME. Dies gibt den Pfad zurück, den Sie gerade eingestellt haben.

naXa
quelle