Wie können Sie die Standardversion von Java auf einem Mac ändern?
Führen Sie zuerst /usr/libexec/Java_home -V
aus, der etwa Folgendes ausgibt:
Matching Java Virtual Machines (3):
1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
Wählen Sie die Version aus, die Sie als Standard verwenden möchten (1.6.0_65-b14-462
für Argumente), und dann:
export Java_HOME=`/usr/libexec/Java_home -v 1.6.0_65-b14-462`
oder Sie können nur die Hauptversion angeben, wie:
export Java_HOME=`/usr/libexec/Java_home -v 1.8`
Wenn Sie Java -version
ausführen, werden Sie Folgendes sehen:
Java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
Fügen Sie einfach die export Java_HOME…
-Zeile zur Init-Datei Ihrer Shell hinzu.
Diese Antwort ist ein Versuch, Folgendes zu behandeln: Wie wird Java-Version systemweit steuern (nicht nur in der aktuell laufenden Shell) ausgeführt, wenn mehrere Versionen von JDK zu Entwicklungszwecken auf macOS El Capitan oder neuer (Sierra, High Sierra, Mojave). Soweit ich das beurteilen kann, tut das keine der aktuellen Antworten (*).
Als Entwickler verwende ich mehrere JDKs und möchte einfach von einem zum anderen wechseln. Normalerweise habe ich den neuesten stabilen für den allgemeinen Gebrauch und andere für Tests. Ich möchte jedoch nicht, dass das System (z. B. wenn ich meine IDE starte) die neueste "Early Access" -Version verwendet, die ich jetzt habe. Ich möchte die Standardeinstellung des Systems kontrollieren, und das sollte zuletzt stabil sein.
Der folgende Ansatz funktioniert mindestens mit Java 7 bis 12(früher Zugriff zum Zeitpunkt des Schreibens), mit Oracle JDK oder OpenJDK (einschließlich builds) von AdoptOpenJDK produziert nach Mitte Oktober 2018 ).
/Library/Java/JavaVirtualMachines
. Das System wählt standardmäßig die höchste Version aus. Contents/Info.plist
in Info.plist.disabled
um. Dieses JDK kann weiterhin verwendet werden, wenn $Java_HOME
darauf zeigt oder in einem Skript oder einer Konfiguration explizit darauf verwiesen wird. Sie wird einfach vom Java
-Befehl des Systems ignoriert.Das Systemstartprogramm verwendet das JDK mit der höchsten Version unter denjenigen, die über eine Info.plist
-Datei verfügen.
Wenn Sie in einer Shell mit einem alternativen JDK arbeiten, wählen Sie Ihre Methode unter den vorhandenen Antworten aus (jenv
oder benutzerdefinierte Aliase/Scripts um /usr/libexec/Java_home
usw.).
Details der Untersuchung in diesem Gist .
(*) Aktuelle Antworten sind entweder veraltet (nicht mehr gültig für macOS El Capitan oder Sierra) oder nur eine einzige JDK oder nicht den systemweiten Aspekt. Viele erklären, wie man $Java_HOME
ändert, dies betrifft jedoch nur die aktuelle Shell und was von dort gestartet wird. Eine Anwendung, die vom Betriebssystem-Starter aus gestartet wird, ist davon nicht betroffen (es sei denn, Sie ändern die richtige Datei und logout/login, was mühsam ist). Dasselbe gilt für Jenv, es ist cool und alles, aber soweit ich das beurteilen kann, ändert es lediglich die Umgebungsvariablen und hat daher die gleiche Einschränkung.
Zusätzlich zu den obigen Antworten füge ich die folgenden Zeilen in meinen .bash_profile
ein, was das Wechseln sehr bequem macht (einschließlich des Kommentars von @ elektromin für Java 9):
alias j12="export Java_HOME=`/usr/libexec/Java_home -v 12`; Java -version"
alias j11="export Java_HOME=`/usr/libexec/Java_home -v 11`; Java -version"
alias j10="export Java_HOME=`/usr/libexec/Java_home -v 10`; Java -version"
alias j9="export Java_HOME=`/usr/libexec/Java_home -v 9`; Java -version"
alias j8="export Java_HOME=`/usr/libexec/Java_home -v 1.8`; Java -version"
alias j7="export Java_HOME=`/usr/libexec/Java_home -v 1.7`; Java -version"
Führen Sie nach dem Einfügen $ source .bash_profile
aus.
Ich kann zu Java 8 wechseln, indem Sie Folgendes eingeben:
$ j8
Java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Eine kleine Fischfunktion basierend auf/usr/libexec/Java_home
function jhome
set Java_HOME (/usr/libexec/Java_home $argv)
echo "Java_HOME:" $Java_HOME
echo "Java -version:"
Java -version
end
Wenn Sie keinen Fisch verwenden, können Sie in bash etwas Ähnliches tun:
#!/bin/bash
jhome () {
export Java_HOME=`/usr/libexec/Java_home [email protected]`
echo "Java_HOME:" $Java_HOME
echo "Java -version:"
Java -version
}
Dann zwischen javas wechseln:
$> jhome #switches to latest Java
$> jhome -v 1.7 #switches to Java 1.7
$> jhome -v 1.6 #switches to Java 1.6
Verwenden Sie Jenv ist ein einfacher Weg.
1.Install jenv
curl -s get.jenv.io | bash
2.Config jenv
cd ~/.jenv/Bewerber / mkdir Java CD Java mkdir 1.7 mkdir 1.8
3.Symlink den jdk-Pfad
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/Kandidat/Java/1.7 ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/Kandidat/Java/1.8
4.Sie sind fertig
befehl wechseln:
jenv verwenden Java 1.8
set default:
jenv default Java 1.7
Es ist ein bisschen schwierig, aber versuchen Sie, die in Installation von Java unter OS X 10.9 (Mavericks) beschriebenen Schritte auszuführen. Grundsätzlich müssen Sie Ihren Alias auf Java
aktualisieren.
Schritt für Schritt:
Nach der Installation von JDK 1.7 müssen Sie den Sudo ln -snf
ausführen, um den Link auf die aktuelle Java
zu ändern. Öffnen Sie dazu das Terminal und geben Sie den Befehl aus:
Sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Beachten Sie, dass sich das Verzeichnis jdk1.7.0_51.jdk
je nach installierter SDK-Version ändern kann.
Nun müssen Sie Java_HOME
so einstellen, dass er auf den Ort verweist, an dem jdk_1.7.0_xx.jdk
installiert wurde. Öffne wieder das Terminal und tippe:
export Java_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
Sie können die export Java_HOME
-Zeile oben in Ihre .bashrc
-Datei einfügen, um Java dauerhaft in Ihrem Terminal zu haben
installieren Sie JDK, nicht nur JRE
/usr/libexec/Java_home -v 1.8
gibt
/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
nächster
touch .bash_profile
open -a TextEdit.app .bash_profile
TextEdit zeigt eine leere Seite an, die Sie ausfüllen können.
zu doc hinzufügen: export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
im Terminal:
export Java_HOME="$(/usr/libexec/Java_home -v 1.8)"
versuchen Sie den Befehl:
javac -version
sollte ausgeben:
javac 1.8.0_111
tl; dr
Fügen Sie die Zeile hinzu:
export Java_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
in die Datei
~/.bash_profile
ersetzen Sie es mit Ihrer heruntergeladenen Version.
dann source ~/.bash_profile
function setjdk() {
if [ $# -ne 0 ]; then
removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
if [ -n "${Java_HOME+x}" ]; then
removeFromPath $Java_HOME
fi
export Java_HOME=`/usr/libexec/Java_home -v [email protected]`
export PATH=$Java_HOME/bin:$PATH
fi
}
geben Sie dies in Ihr ~/.profile ein und verwenden Sie es in Ihrem Terminal wie setjdk 1.8
, setjdk 1.7
, setjdk 9
etc etc ...
Wenn Sie keine removeFromPath
haben, dann ist es:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
Verwenden Sie jenv, es ist wie ein Java-Umgebungsmanager. Es ist sehr einfach zu bedienen und zu reinigen
Für Mac führen Sie die folgenden Schritte aus:
brew install jenv
git clone https://github.com/gcuisinier/jenv.git ~/.jenv
Installation: Wenn Sie bash verwenden, gehen Sie folgendermaßen vor:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $Shell -l
Fügen Sie die gewünschten Versionen von JVM zu jenv hinzu:
jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home
Überprüfen Sie die installierten Versionen:
jenv versions
Legen Sie die Java-Version fest, die Sie verwenden möchten:
jenv global Oracle64-1.6.0
Von der offiziellen Apple-Seite Java_home (1) :
**USAGE**
/usr/libexec/Java_home helps users set a $Java_HOME in their login rc files, or provides a way for
command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
tecture requirement. The --exec argument can invoke tools in the selected $Java_HOME/bin directory,
which is useful for starting Java command-line tools from launchd plists without hardcoding the full
path to the Java command-line tool.
Usage for bash-style shells:
$ export Java_HOME=`/usr/libexec/Java_home`
Usage for csh-style shells:
% setenv Java_HOME `/usr/libexec/Java_home`
Wenn Sie es noch nicht einstellen können. mit diesem Befehl.
java_HOME = /usr/libexec/Java_home -v 1.8
exportieren
dann musst du dieses verwenden.
java_HOME = $(/usr/libexec/Java_home -v 1.8)
exportieren
es wird sicherlich funktionieren.
Finden Sie zunächst heraus, wo Sie die Umgebungsvariablen speichern.
Schritte zum Einrichten der Umgebungsvariablen: -
Richten Sie jetzt Umgebungsvariablen in Ihrer Datei ein
ein. Für emacs.profile können Sie diesen link OR verwenden, siehe Abbildung unten
b. Für die Einrichtung des ZSH-Profils -
1. export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
2. source ~/.zshrc - Restart zshrc to reflect the changes.
3. echo $Java_HOME - make sure path is set up properly
----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
4. Java -version
--> Java version "1.8.0_112" Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)
All set Jetzt können Sie die Java-Version einfach aktualisieren oder herabsetzen.
Ich habe die Antwort von @Alex oben angepasst und Folgendes geschrieben, um den Code für Java 9 zu korrigieren.
$ cat ~/.jdk
#!/bin/bash
#list available jdks
alias jdks="/usr/libexec/Java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
echo "Switching Java version $1";
requestedVersion=$1
oldStyleVersion=8
# Set the version
if [ $requestedVersion -gt $oldStyleVersion ]; then
export Java_HOME=$(/usr/libexec/Java_home -v $1);
else
export Java_HOME=`/usr/libexec/Java_home -v 1.$1`;
fi
echo "Setting Java_HOME=$Java_HOME"
which Java
Java -version;
}
$ jdk 8
Switching Java version 8
Setting Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/Java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
$ jdk 9
Switching Java version 9
Setting Java_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/Java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
Wenn Sie Fisch verwenden und Mac verwenden, und Sie möchten zwischen JDKs wechseln können, dann funktioniert das auf Mac für mich.
@Kenglxns Antwort hat für mich nicht funktioniert und ich habe herausgefunden, dass es nicht von bcos gesetzt wurde -g welches global ist!
Fügen Sie unten 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/Nebenversion 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
Basierend auf der Antwort von @markhellewell habe ich ein paar Alias-Funktionen erstellt, die dies für Sie tun werden. Fügen Sie diese einfach Ihrer Shell-Startdatei hinzu
#list available jdks
alias jdks="/usr/libexec/Java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
echo "Switching Java version";
export Java_HOME=`/usr/libexec/Java_home -v 1.$1`;
Java -version;
}
https://Gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4
So mache ich das auf meinem Linux (Ubuntu/Mint-Kumpel), ich denke, Mac kann das ähnlich machen.
Schritte:
/mnt/star/program/Java/jdk-1.8
ln -s /mnt/star/program/Java/jdk-1.8 /mnt/star/program/Java/java
/mnt/star/program/Java/java
der Softlink.Java_HOME
in einem Startskript fest./etc/profile.d/eric.sh
verwenden oder einfach ~/.bashrc
.Java_HOME=/mnt/star/program/Java/java
Java -version
sollte die Java-Version drucken./mnt/star/program/Java/jdk-11
~/.bashrc
eine Variable für verschiedene Java-Versionen._E_Java_HOME_11='/mnt/star/program/Java/jdk-11'
_E_Java_HOME_8='/mnt/star/program/Java/jdk-8'
# dir of default version,
_E_Java_HOME_D=$_E_Java_HOME_8
~/.bashrc
den Befehl zum Umschalten der Java-Version.## switch Java version,
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"
# default Java version,
alias jvd="rm $Java_HOME; ln -s $_E_Java_HOME_D $Java_HOME"
alias jv="Java -version"
source ~/.bashrc
, damit die Änderungen wirksam werden.Befehle:
jv11
jv8
jvd
_E_Java_HOME_D
gekennzeichnet ist.jv
Beispielausgabe:
[email protected]:~$ 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)
[email protected]:~$ jv11
[email protected]:~$ 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)
[email protected]:~$ jvd
[email protected]:~$ 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)
[email protected]:~$
Java_HOME
verwendet wird.Wenn ich jdk von Hand auf meinem Rechner installiere, behalte ich die Nebenversion und mache dann einen Softlink mit der Hauptversion, jedoch ohne die Nebenversion.
z.B
// das ist das eigentliche dir,jdk1.8.0_191
// Dies ist ein Softlink zu jdk1.8.0_191
jdk-8
// Dies ist ein Softlink zu jdk-8
oder jdk-11
Java
Ich definiere den Befehlsalias in ~/.bashrc
, definiere aber die Variable in einer separaten Datei.
Ich benutze ~/.eric_var
, um die Variablen zu definieren, und ~/.bashrc
wird sie als Quelle verwenden (z. B. source $HOME/.eric_var
).
fügen Sie der ~/.zshenv
-Datei den folgenden Befehl hinzu
export Java_HOME=`/usr/libexec/Java_home -v 1.8`
Wenn Sie über mehrere Versionen verfügen und mit einer bestimmten Version etwas ausführen möchten, verwenden Sie dieses Beispiel:
/usr/libexec/Java_home -v 1.7.0_75 --exec Java -jar you-file.jar
Um ein separat installiertes JDK in die von /usr/libexec/Java_home -V
angegebene Liste aufzunehmen, können Sie das Verzeichnis folgendermaßen symbolisch verknüpfen:
Sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
Um beispielsweise das in Android Studio enthaltene JDK (1.8.0_152 zum Zeitpunkt des Schreibens) zu registrieren, verwenden Sie Folgendes:
Sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-Android-studio.jdk
Nun wird Java_home
das JDK unter Matching Java Virtual Machines
auflisten und Sie können es wie oben beschrieben auswählen.
Dieses Tool erledigt die Arbeit für Sie:
http://www.guigarage.com/2013/02/change-Java-version-on-mac-os/
Es ist ein einfaches JavaOne, mit dem die aktuelle Java-Version definiert werden kann. Die Version kann in einer Shell verwendet werden, die geöffnet wird, nachdem eine Version im Tool ausgewählt wurde.