1337 Stimmen

Wie setzt man die Standard-Java (JDK) Version auf macOS oder ändert sie?

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

2412voto

markhellewell Punkte 21142

Zuerst führen Sie /usr/libexec/java_home -V aus, was eine Ausgabe wie folgt ergibt:

Passende 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 festlegen möchten (1.6.0_65-b14-462 aus Argumentationsgründen) 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 jetzt java -version ausführen, sehen Sie:

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 die Zeile export JAVA_HOME… zu Ihrer Shell-Init-Datei hinzu.

Für Bash (wie von antonyh angegeben):

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Für Fish (wie von ormurin angegeben)

set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)

Die Aktualisierung der .zshrc-Datei sollte funktionieren:

nano ~/.zshrc

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0)

Drücken Sie Strg+X, um den Editor zu verlassen Drücken Sie Y, um Ihre Änderungen zu speichern

source ~/.zshrc
echo $JAVA_HOME
java -version

580voto

Hugues M. Punkte 18526

Diese Antwort ist ein Versuch, zu klären, wie man die Java-Version systemweit kontrollieren kann (nicht nur in der aktuellen Shell), wenn mehrere Versionen von JDK für Entwicklungs- zwecke unter macOS El Capitan oder neuer (Sierra, High Sierra, Mojave) installiert sind. Soweit ich das beurteilen kann, erfüllt keine der aktuellen Antworten diesen Zweck (*).

Als Entwickler verwende ich mehrere JDKs und möchte einfach zwischen ihnen wechseln können. Normalerweise habe ich die neueste stabile Version für den allgemeinen Gebrauch und andere für Tests. Aber ich möchte nicht, dass das System (z.B. wenn ich meine IDE starte) momentan die neueste "early access" Version verwendet, die ich habe. Ich möchte die Vorgabe des Systems kontrollieren, und das sollte die neueste stabile sein.

Der folgende Ansatz funktioniert zumindest mit Java 7 bis 12 (zum Zeitpunkt dieses Schreibens "early access") mit Oracle JDK oder OpenJDK (einschließlich Builds von AdoptOpenJDK, die nach Mitte Oktober 2018 erstellt wurden).

Lösung ohne Tools von Drittanbietern:

  • Lassen Sie alle JDKs an ihrem Standardort, unter /Library/Java/JavaVirtualMachines. Das System wählt standardmäßig die höchste Version aus.
  • Um zu verhindern, dass ein JDK standardmäßig ausgewählt wird, benennen Sie seine Contents/Info.plist in Info.plist.disabled um. Dieses JDK kann immer noch verwendet werden, wenn $JAVA_HOME darauf zeigt oder explizit in einem Skript oder einer Konfiguration referenziert wird. Es wird einfach vom Systembefehl java ignoriert.

Der Systemstarter wird das JDK mit der höchsten Version unter denen verwenden, die eine Info.plist-Datei haben.

Wenn Sie in einer Shell mit einem alternativen JDK arbeiten, wählen Sie Ihre Methode unter den vorhandenen Antworten aus (jenv oder benutzerdefinierte Aliase/Skripte rund um /usr/libexec/java_home usw.).


Details des Untersuchungsvorgangs finden Sie in diesem Gist.


(*) Die aktuellen Antworten sind entweder veraltet (nicht mehr gültig für macOS El Capitan oder Sierra), behandeln nur ein einzelnes JDK oder adressieren nicht den systemweiten Aspekt. Viele erklären, wie man $JAVA_HOME ändert, aber das betrifft nur die aktuelle Shell und was von dort aus gestartet wird. Es hat keinen Einfluss auf eine Anwendung, die vom OS-Startprogramm gestartet wird (es sei denn, Sie ändern die richtige Datei und melden sich ab/an, was mühsam ist). Das Gleiche gilt für jenv, es ist cool und alles, aber soweit ich das beurteilen kann, ändert es lediglich Umgebungsvariablen, daher hat es dieselbe Einschränkung.

414voto

Justin Zhang Punkte 3728

Zusätzlich zu den obigen Antworten habe ich die folgenden Zeilen in meine .bash_profile (oder .zshrc für MacOS 10.15+) eingefügt, was es wirklich bequem macht, zu wechseln (einschließlich @elektromins Kommentar für Java 9):

alias j20="export JAVA_HOME=`/usr/libexec/java_home -v 20`; java -version"
alias j19="export JAVA_HOME=`/usr/libexec/java_home -v 19`; java -version"
alias j18="export JAVA_HOME=`/usr/libexec/java_home -v 18`; java -version"
alias j17="export JAVA_HOME=`/usr/libexec/java_home -v 17`; java -version"
alias j16="export JAVA_HOME=`/usr/libexec/java_home -v 16`; java -version"
alias j15="export JAVA_HOME=`/usr/libexec/java_home -v 15`; java -version"
alias j14="export JAVA_HOME=`/usr/libexec/java_home -v 14`; java -version"
alias j13="export JAVA_HOME=`/usr/libexec/java_home -v 13`; java -version"
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"

Nach dem Einfügen, führen Sie $ source .bash_profile aus

Ich kann zu Java 8 wechseln, indem ich folgendes eingebe:

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

65voto

hermeslm Punkte 967

Aufgrund mehrerer Homebrew, casts (Deprecated Notice AdoptOpenJDK/openjdk) und MacOS-Updates veröffentliche ich diese aktualisierte Antwort.

Der Homebrew-Tap AdoptOpenJDK/openjdk wurde offiziell zugunsten der temurin-Casks verworfen, die direkt vom Homebrew-Projekt bereitgestellt werden, aber Homebrew ist der beste Weg, um verschiedene Java-Versionen zu verwalten und zu verwenden.

Falls Sie bereits Homebrew und den AdoptOpenJDK/openjdk Cast installiert haben, bitte zunächst diesen Brew-Tap untappen:

$ brew untap AdoptOpenJDK/openjdk

falls Sie Homebrew nicht installiert haben.

1 - Installieren Sie Homebrew.

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2 - Um die neueste Java-Version (16) herunterzuladen:

$ brew install --cask temurin

3 - Um andere Versionen zu installieren:

$ brew tap homebrew/cask-versions
$ brew install --cask temurin8
$ brew install --cask temurin11
$ brew install --cask temurin17
$ brew install --cask temurin18
$ brew install --cask temurin19
$ brew install --cask temurin21

4 - Umschalten zwischen verschiedenen Java-Versionen

Um zwischen verschiedenen Java-Versionen umzuschalten, müssen Sie nur Folgendes zu Ihrer .bash_profile oder .zshrc hinzufügen.

In diesem Fall möchten wir zwischen Java8, Java11, Java17... und Java21 wechseln:

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_17_HOME=$(/usr/libexec/java_home -v17)
export JAVA_18_HOME=$(/usr/libexec/java_home -v18)
export JAVA_19_HOME=$(/usr/libexec/java_home -v19)
export JAVA_21_HOME=$(/usr/libexec/java_home -v21)

alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java17='export JAVA_HOME=$JAVA_17_HOME'
alias java18='export JAVA_HOME=$JAVA_18_HOME'
alias java19='export JAVA_HOME=$JAVA_19_HOME'
alias java21='export JAVA_HOME=$JAVA_21_HOME'

# standardmäßig zu Java 21
java21

5 - Laden Sie .bash_profile oder .zshrc neu, damit die Aliasse wirksam werden:

$ source ~/.bash_profile

oder

$ source ~/.zshrc

6 - Schließlich können Sie die Aliasse verwenden, um zwischen verschiedenen Java-Versionen zu wechseln.

$ java8
$ java -version
java version "1.8.0_261"

Alter Leitfaden, wenn Sie alte Homebrew- und MacOS-Versionen haben...

Ich werde meine Erfahrungen mit macOS Big Sur v11.4 teilen, der beste Weg, um mit diesen Problemen umzugehen, besteht darin, Java mit Homebrew zu installieren:

1 - Installieren Sie Homebrew.

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2 - Installieren Sie Homebrew Cask.

$ brew tap homebrew/cask-versions 
$ brew update 
$ brew tap homebrew/cask

3 - Installieren Sie die neueste Java-Version

$ brew cask install java

4 - Installieren Sie die anderen benötigten Java-Versionen (Java8, Java11, Java13).

$ brew tap adoptopenjdk/openjdk

$ brew cask install adoptopenjdk8
$ brew cask install adoptopenjdk11
$ brew cask install adoptopenjdk13
$ brew cask install adoptopenjdk14

5 - Umschalten zwischen verschiedenen Java-Versionen

Um zwischen verschiedenen Java-Versionen umzuschalten, müssen Sie nur Folgendes zu Ihrer .bash_profile oder .zshrc hinzufügen.

In diesem Fall möchten wir zwischen Java8, Java11, Java13 und Java14 wechseln:

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)

alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'
alias java14='export JAVA_HOME=$JAVA_14_HOME'

# standardmäßig zu Java 14
java14

6 - Laden Sie .bash_profile oder .zshrc neu, damit die Aliasse wirksam werden:

$ source ~/.bash_profile

oder

$ source ~/.zshrc

7 - Schließlich können Sie die Aliasse verwenden, um zwischen verschiedenen Java-Versionen zu wechseln.

$ java8
$ java -version
java version "1.8.0_261"

Weitere Informationen finden Sie in diesem Beitrag: So verwenden Sie Brew, um Java auf dem Mac zu installieren

65voto

kenglxn Punkte 1544

Ein kleines Fischskript 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 kein Fisch verwenden, können Sie etwas Ähnliches in Bash tun:

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home $@`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -Version:"
  java -version
}

Dann zum Wechseln zwischen Javas tun Sie:

$> jhome           # wechselt zu neuester Java-Version
$> jhome -v 1.7    # wechselt zu Java-Version 1.7
$> jhome -v 1.6    # wechselt zu Java-Version 1.6

Quelle: https://gist.github.com/kenglxn/1843d552dff4d4233271

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X