it-swarm.com.de

Wie kann ich die Standardversion von Java (JDK) unter OS X einstellen oder ändern?

Wie können Sie die Standardversion von Java auf einem Mac ändern?

470
Venkat

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.

854
markhellewell

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 ).

Lösung ohne Tools von Drittanbietern:

  • belassen Sie alle JDKs an ihrem Standardspeicherort unter /Library/Java/JavaVirtualMachines. Das System wählt standardmäßig die höchste Version aus. 
  • Um ein JDK von der Standardauswahl auszuschließen, benennen Sie seinen 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.

247
Hugues M.

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)
150
Justin Zhang

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

ref: https://Gist.github.com/kenglxn/1843d552dff4d4233271

49
kenglxn

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

30
Yuantao

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

26
Trein

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
20
user2708060

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

15
dustinevan
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:?;;") }

10
Gabriel Reiser

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
5
slal

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`
5
Antonio

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.

3
RohitKumar

Finden Sie zunächst heraus, wo Sie die Umgebungsvariablen speichern. 

  1. emacs 
  2. bash_profile 
  3. zshrc-datei

Schritte zum Einrichten der Umgebungsvariablen: -

  1. Laden Sie die jdk von Java herunter
  2. installieren Sie es per Doppelklick
  3. Richten Sie jetzt Umgebungsvariablen in Ihrer Datei ein

    ein. Für emacs.profile können Sie diesen link OR verwenden, siehe Abbildung unten 

 enter image description here

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.

3
Vrushali Raut

JDK Switch Script

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;
}

Wechseln Sie zu Java 8

$ 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)

Wechseln Sie zu Java 9

$ 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)
3

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
2
Gob00st

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

1
Alex

So mache ich das auf meinem Linux (Ubuntu/Mint-Kumpel), ich denke, Mac kann das ähnlich machen.


Installiere & config

Schritte:  

  • [Basis - Teil]
  • Laden Sie jdk (die Datei .tgz ) manuell herunter. 
  • Dekomprimieren und ordnungsgemäß umbenennen, an einem geeigneten Ort.
    z.B. /mnt/star/program/Java/jdk-1.8
  • Machen Sie einen Softlink, 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 Softlink.
  • Legen Sie Java_HOME in einem Startskript fest.
    Könnte eine Datei wie /etc/profile.d/eric.sh verwenden oder einfach ~/.bashrc.
    z.B. Java_HOME=/mnt/star/program/Java/java
  • Dann öffnen Sie eine neue Bash-Shell. Java -version sollte die Java-Version drucken.
  • [Mehr Version - Teil]
  • Laden Sie bei Bedarf weitere Java-Versionen herunter und installieren Sie sie, ähnlich den obigen Schritten.
    z.B
    /mnt/star/program/Java/jdk-11
  • [Schalter - Teil]
  • Definieren Sie 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'
    # dir of default version,
    _E_Java_HOME_D=$_E_Java_HOME_8
  • Definieren Sie in ~/.bashrc den Befehl zum Umschalten der Java-Version.
    z.B
    ## 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"
  • Im Terminal source ~/.bashrc, damit die Änderungen wirksam werden.
  • Dann könnte man mit den definierten Befehlen wechseln. 

Befehle - von oben Konfig

Befehle:  

  • jv11
    Wechseln Sie zu Java 11
  • jv8
    Wechseln Sie zu Java 8
  • jvd
    Wechseln Sie zur Java-Standardversion, die mit dem oben definierten _E_Java_HOME_D gekennzeichnet ist.
  • jv
    Java-Version anzeigen.

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]:~$ 

Mechanismus

  • Es wechselt durch Ändern des Softlinks, der als Java_HOME verwendet wird.

Tipps

  • 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).

1
Eric Wang

fügen Sie der ~/.zshenv-Datei den folgenden Befehl hinzu

export Java_HOME=`/usr/libexec/Java_home -v 1.8` 
1
xsilen T

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
0
MonstroDev

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.

0
friederbluemle

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.

0
Hendrik Ebbers