Wie können Sie die Standardversion von Java auf einem Mac ändern?
Antworten
Zu viele Anzeigen?Zuvor habe ich Aliasnamen in der .zshrc verwendet, um einfach zwischen Versionen zu wechseln, aber heute benutze ich SDKMAN. SDKMAN kann auch das Setzen von Standard-Java für das System übernehmen sowie das Herunterladen und Installieren neuer Java-Versionen.
Sobald sdkman installiert ist, können Sie Befehle ähnlich wie mit dem nvm-Tool zum Verwalten von Node-Versionen ausführen.
sdk list java
listet die verfügbaren Java-Versionen auf Ihrem System sowie online verfügbare Versionen zur Installation auf, einschließlich ihres Identifikators, den Sie in den Befehlen sdk use
, sdk default
und sdk install
verwenden können.
z.B. um Amazon Corretto 11.0.8 zu installieren und zu fragen, ob es als neues Standard-Java festgelegt werden soll, führen Sie Folgendes aus: sdk install java 11.0.8-amzn
Ein Feature, das ich auch regelmäßig verwende, ist die Datei .sdkmanrc
. Wenn Sie diese Datei in einem Verzeichnis auf Ihrem Rechner platzieren und den Befehl sdk env
in diesem Verzeichnis ausführen, können Sie Tool-Versionen konfigurieren, die nur in diesem Verzeichnis verwendet werden. Es ist auch möglich, dass sdkman Tool-Versionen automatisch wechselt, indem Sie die Konfiguration sdkman_auto_env=true
verwenden.
SDKMAN unterstützt auch die Verwaltung anderer Tools für die JVM wie Gradle, Kotlin, Maven und mehr.
Weitere Informationen finden Sie unter https://sdkman.io/usage#env
Wenn Sie Fisch verwenden und Mac verwenden und zwischen JDKs wechseln möchten, dann funktioniert das Folgende für mich auf Mac:
Die Antwort von @kenglxn hat bei mir nicht funktioniert und ich habe herausgefunden, dass ich -g nicht gesetzt habe, was global ist!
Fügen Sie das Folgende unter ~/.config/fish/config.fish ein:
alias j8="jhome -v 1.8.0_162"
alias j9="jhome -v 9.0.1"
function jhome
set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
funcsave jhome
Um herauszufinden, welche Version/Unterversion Sie installiert haben, können Sie Folgendes tun:
/usr/libexec/java_home -V 579ms Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_162, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
Dies wird Sie darüber informieren, wie Sie auf Ihrem MacOS-Gerät JAVA-Versionen umschalten können. Dies kann nützlich sein, wenn Sie mit Apps arbeiten, die nicht mit aktualisierten JAVA-Versionen funktionieren. Zum Beispiel funktionieren Anwendungen wie Cassandra nur mit JAVA-Version 8.
Zunächst müssen Sie sicherstellen, dass Sie mehrere JAVA-Versionen installiert haben.
Öffnen Sie ein neues Terminalfenster und geben Sie ein:
/usr/libexec/java_home -V
Ihre Ausgabe sollte wie folgt aussehen:
Passende Java-Virtual Machines (2):
11.0.1, x86_64: "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
1.8.0_201, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home
Beachten Sie, dass zwei JDKs verfügbar sind. Wenn Sie die benötigte Java-Version nicht sehen, laden Sie diese hier herunter und installieren Sie sie (JDK 8 wird als 1.8 dargestellt). Sobald Sie das passende JDK installiert haben, wiederholen Sie diesen Schritt.
-
Machen Sie sich Notizen zur gewünschten JDK-Version, zu Beispiel sind "11.0" und "1.8" die verfügbaren JDK-Versionen im obigen Beispiel.
-
Wechseln Sie zur gewünschten Version. Wenn Sie zum Beispiel zu JDK 8 wechseln möchten, geben Sie die folgende Zeile ein:
export JAVA_HOME=
/usr/libexec/java_home -v 1.8
Für 11.0, ersetzen Sie "1.8" durch "11.0"
-
Überprüfen Sie Ihre JDK-Version, indem Sie im Terminal eingeben:
java -version
Wenn Sie alle Schritte richtig befolgt haben, sollte die JDK-Version mit derjenigen übereinstimmen, die Sie im letzten Schritt angegeben haben.
-
(Optional) Um dies zur Standard-JDK-Version zu machen, geben Sie im Terminal Folgendes ein:
open ~/.bash_profile
Dann fügen Sie Ihr Terminal-Eingabe aus Schritt 3 dieser Datei hinzu:
ZUR JAVA-VERSION 8 WECHSELN
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Speichern und schließen Sie die Datei.
Fertig.
Hier ist, wie ich es auf meinem Linux (Ubuntu / Mint Mate) mache, ich denke, Mac kann es ähnlich machen.
Installieren & konfigurieren
Schritte:
- [Grundlagen - Teil]
- Lade das JDK (die .tgz Datei) manuell herunter.
- Entpacke & benenne es ordnungsgemäß um, an einem geeigneten Speicherort.
z.B./mnt/star/program/java/jdk-1.8
- Erstelle einen symbolischen Link, der später geändert wird, um die Java-Version zu wechseln.
z.B.ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
Somit ist/mnt/star/program/java/java
der symbolische Link. - Setze
JAVA_HOME
in einem Startskript.
Könnte eine Datei wie/etc/profile.d/eric.sh
verwenden, oder einfach~/.bashrc
.
z.B.JAVA_HOME=/mnt/star/program/java/java
- Öffne dann eine neue Bash-Shell.
java -version
sollte die Java-Version ausgeben. - [Mehrere Versionen - Teil]
- Lade & installiere weitere Java-Versionen bei Bedarf, ähnlich wie oben beschrieben.
z.B.
/mnt/star/program/java/jdk-11
- [Wechseln - Teil]
- Definiere in
~/.bashrc
eine Variable für verschiedene Java-Versionen.
z.B.
_E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
_E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
# Verzeichnis der Standardversion,
_E_JAVA_HOME_D=$_E_JAVA_HOME_8
- Definiere in
~/.bashrc
ein Befehl zum Wechseln der Java-Version.
z.B.
## Java-Version wechseln,
alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
# Standard-Java-Version,
alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
alias jv="java -version"
- In der Konsole
source ~/.bashrc
, um die Änderungen wirksam werden zu lassen. - Dann kann man mit den definierten Befehlen wechseln.
Befehle - aus der obigen Konfiguration
Befehle:
jv11
Wechsle zu Java 11jv8
Wechsle zu Java 8jvd
Wechsle zur Standard-Java-Version, die durch_E_JAVA_HOME_D
oben definiert ist.jv
Zeige die Java-Version an.
Beispiel-Ausgabe:
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$ jv11
eric@eric-pc:~$ jv
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
eric@eric-pc:~$ jvd
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$
Mechanismus
- Es wechselt, indem der symbolische Link geändert wird, der als
JAVA_HOME
verwendet wird.
Tipps
-
Auf meinem Rechner, wenn ich das JDK manuell installiere, behalte ich die Nebenversion bei, dann erstelle ich einen symbolischen Link mit der Hauptversion, aber ohne die Nebenversion.
z.B.
// das ist das tatsächliche Verzeichnis,
jdk1.8.0_191
// das ist ein symbolischer Link zu
jdk1.8.0_191
jdk-8
// das ist ein symbolischer Link zu
jdk-8
oderjdk-11
java
-
Ich definiere Befehlaliasse in
~/.bashrc
, aber definiere Variablen in einer separaten Datei.
Ich verwende~/.eric_var
, um die Variablen zu definieren, und~/.bashrc
wird sie einbinden (z.B.source $HOME/.eric_var
).