Wie kann ich die Standard-Java-Version (JDK) unter OS X festlegen oder ändern?

780

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

Venkat
quelle
2
Was /usr/libexec/java_homesagt Ihnen die Ausführung ?
Bart
2
/ usr / libexec / java_home gibt /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Venkat
Möglicherweise müssen Sie nur neu starten. Hast du das versucht?
Bart
Ja, der Computer und das Terminal wurden neu gestartet ... keine Änderung.
Venkat
3
Könnten Sie bitte die hoch gewählte Antwort von @markhellewell unten akzeptieren? Es hätte mir geholfen, es ein bisschen schneller zu finden, und es ist einfach schön. :)
Taytay

Antworten:

1410

Erster Lauf, /usr/libexec/java_home -Vder ungefähr 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-462aus Gründen der Argumentation), und zwar 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 laufen, werden java -versionSie 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 die export JAVA_HOME…Zeile zur Init-Datei Ihrer Shell hinzu.

Für Bash (wie von Antonyh angegeben ):

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

Für Fische (wie von Ormurin angegeben)

set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
Markhellewell
quelle
2
@ MattO'Brien es ist etwas, das von der Shell, die Sie verwenden, und der Konfiguration, die Sie haben, abhängt, also kann ich keine vollständige Lösung dafür geben ...
Markhellewell
11
Das sind wirklich Backticks der exportLinie
David West
6
Das hat bei mir nicht funktioniert. Nehmen Sie den Pfad von java_home -V und fügen Sie ihn dem Exportbefehl hinzu, wie folgt: export JAVA_HOME = "/ System / Library / Java / JavaVirtualMachines / 1.6.0.jdk / Contents / Home"
oden
68
Dies funktioniert in Bash - export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)- Beachten Sie auch, dass java_home teilweise Übereinstimmungen zulässt, sodass Sie nicht die Vollversion einschließen müssen, da die neueste Version gefunden wird. Dies erleichtert Updates.
Antonyh
14
Stellen Sie sicher, dass Sie "nicht" für den Export verwenden.
Schneesturm
409

Diese Antwort ist ein Versuch, Adresse: wie Java - Version systemweite Steuerung (nicht nur in aktuell laufend Shell) , wenn mehrere Versionen von JDK für Entwicklungszwecke auf installierte macOS El Capitan oder neue (Sierra, High Sierra, Mojave) . Soweit ich das beurteilen kann, tut dies 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 Version für "Early Access" verwendet, die ich derzeit habe. Ich möchte die Standardeinstellung des Systems steuern, und das sollte zuletzt stabil sein.

Der folgende Ansatz funktioniert mindestens mit Java 7 bis 12 (früher Zugriff zum Zeitpunkt dieses Schreibens), mit Oracle JDK oder OpenJDK (einschließlich Builds von AdoptOpenJDK, die nach Mitte Oktober 2018 erstellt wurden ).

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 standardmäßig von der Auswahl auszuschließen, benennen Sie es Contents/Info.plistin umInfo.plist.disabled . Dieses JDK kann weiterhin verwendet werden, wenn es darauf $JAVA_HOMEverweist oder in einem Skript oder einer Konfiguration explizit referenziert wird. Es wird vom Systembefehl einfach ignoriert java.

Der Systemstarter verwendet das JDK mit der höchsten Version unter denjenigen, die eine Info.plistDatei haben.

Wenn Sie in einer Shell mit alternativem JDK arbeiten, wählen Sie Ihre Methode unter den vorhandenen Antworten ( jenvoder benutzerdefinierten Aliasnamen / Skripten /usr/libexec/java_homeusw.) aus.


Einzelheiten der Untersuchung in diesem Kern .


(*) Aktuelle Antworten sind entweder veraltet (nicht mehr gültig für macOS El Capitan oder Sierra) oder richten sich nur an ein einzelnes JDK oder nicht an den systemweiten Aspekt. Viele erklären, wie man Änderungen vornimmt $JAVA_HOME, aber dies betrifft nur die aktuelle Shell und was von dort aus gestartet wird. Eine vom Betriebssystem-Launcher gestartete Anwendung ist davon nicht betroffen (es sei denn, Sie ändern die richtige Datei und das Abmelden / Anmelden, was mühsam ist). Das gleiche gilt für jenv, es ist cool und alles, aber soweit ich das beurteilen kann, ändert es lediglich die Umgebungsvariablen, so dass es die gleiche Einschränkung hat.

Hugues M.
quelle
16
Dies ist die Antwort , die ich suchte, da jenvnoch der JAVA_HOMELage sind , die systemweite Java - Version zu setzen, dh die eine Eclipse - verwenden würde.
Giovanni Lovato
3
@Rodrigo Ja, wie in "Details der Untersuchung" (oben verlinkt) erwähnt: "Das Installieren eines JDK wird ebenfalls überschrieben /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/. Anscheinend wird dies der neue Bereich" Einstellungen "starten - dies ist die einzige Ausnahme, die ich zu meiner Lösung gefunden habe: das thingy verwendet weiterhin JDK9 (das letzte, das ich installiert habe), aber keine andere Java-Anwendung. "
Hugues M.
2
Es ist erwähnenswert, dass sich Java-Versionen in / Library / Java / JavaVirtualMachines befinden und dass sich die oben genannte hervorragende Arbeitslösung in diesem Kontext befindet.
Andrew Kostka
3
Genau dies ist die beste und funktionalste Lösung für diese Frage. Leider so.
Aerodynamika
3
Ich kann Ihnen nicht genug für diese Antwort danken. Dadurch wurde das Starten von Anwendungen über den Betriebssystemstarter behoben.
Karthic Raghupathi
248

Zusätzlich zu den obigen Antworten füge ich die folgenden Zeilen in mein .bash_profile(oder .zshrcfür MacOS 10.15+) ein, was das Wechseln wirklich 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"

Nach dem Einfügen ausführen $ source .bash_profile

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)
Justin Zhang
quelle
5
Dies ist die Syntax für Java 9: alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
elektromin
3
Fantastische einfache Aliase für schnelles Umschalten.
Gbonetti
Durch Verwenden alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"und anschließendes Eingeben j10können Sie zur aktuellen Version von Java (in meinem Fall Java 10) zurückkehren
intagli
Ich würde ein CLI-Tool ähnlich dem nvmzum Wechseln von Java-Versionen jvm
Andy
Ich erhalte diesen Fehler bei der Beschaffung: /Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
cosbor11
56

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 $@`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

Um dann zwischen Javas zu wechseln, gehen Sie wie folgt vor:

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

Kenglxn
quelle
1
Dies ändert sich nur für die jeweilige Terminalsitzung. Gibt es eine Möglichkeit, dies zu aktualisieren, um es systemweit zu ändern?
ENG618
1
Ich musste export JAVA_HOME=(/usr/libexec/java_home $argv)anstelle der zweiten Zeile Ihrer jhomeFunktion schreiben .
Daniel AA Pelsmaeker
32

Es ist etwas schwierig, aber versuchen Sie, die unter Installieren von Java unter OS X 10.9 (Mavericks) beschriebenen Schritte auszuführen . Grundsätzlich müssen Sie Ihren Alias ​​auf aktualisieren java.

Schritt für Schritt:

Nach der Installation von JDK 1.7 müssen Sie dies tun sudo ln -snf, um den Link auf aktuell zu ändern java. Öffnen Sie dazu das Terminal und geben Sie den folgenden Befehl ein:

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.jdkabhängig von der von Ihnen installierten SDK-Version ändern kann.

Jetzt müssen Sie festlegen JAVA_HOME, wo jdk_1.7.0_xx.jdkinstalliert werden soll. Öffnen Sie das Terminal erneut und geben Sie Folgendes ein:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"

Sie können die export JAVA_HOMEobige Zeile in Ihre .bashrcDatei einfügen, um Java dauerhaft in Ihrem Terminal zu haben

Trein
quelle
1
Wie setze ich die Variable JAVA_HOME? Gibt es einen bestimmten Ort, an dem ich es eingestellt habe?
Venkat
Wo exportiere ich JAVA_HOME? und wo wird das gespeichert?
Venkat
1
Ich habe die Antwort aktualisiert. Kennen Sie die SDK-Version, die Sie installiert haben? Der Ordnername nimmt die SDK-Versionsnummer an, sodass sich die obigen Befehle möglicherweise etwas ändern.
Trein
Ich habe die neueste installiert, ich glaube es ist 51.
Venkat
Die Variable JAVA_HOMEwird in der aktuellen Terminalsitzung exportiert. Sie können es zu unserem hinzufügen, .bashrcwenn Sie möchten. Ich werde die Befehle an die letzte Version anpassen.
Trein
32

Die Verwendung von jenv ist ein einfacher Weg.

1.Installieren Sie jenv

    curl -s get.jenv.io | Bash

2.Config jenv

    cd ~ / .jenv / Kandidaten /
    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 / Kandidaten / Java / 1.7
    ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~ / .jenv / Kandidaten / Java / 1.8

4.Sie sind fertig

Schaltbefehl:

jenv benutze Java 1.8

Standard festlegen:

jenv default java 1.7

Yuantao
quelle
Saubere und schöne Lösung.
Pinturic
Anstelle von "jenv use java 1.8" musste ich "jenv shell 1.8" verwenden. "Shell" kann je nach Bedarf auch "global" oder "lokal" sein.
Steve Gelman
1
jenv ist schön, wenn es funktioniert. Ich würde jedoch dagegen empfehlen, da die verwendete Standard-Java-Version nicht "wirklich" geändert wird. Dies wird durch Ausführen des Befehls "/ usr / libexec / java_home -V" deutlich, nur durch JAVA_HOME. Dies führt bei einigen Anwendungen zu seltsamen Problemen, z. B. bei Eclipse.
Simon
Abgesehen davon schlägt dieser paranoide Teil von mir vor, nichts zu kräuseln, um zu schlagen. Selbst wenn Sie der Meinung sind, dass die Website vertrauenswürdig ist, kann Ihnen niemand garantieren, dass sie nicht hackbar ist. Verwenden Sie den Paketmanager Ihres Betriebssystems.
Aleksandr Kravets
Diese Informationen sind veraltet. Überprüfen Sie die offizielle Dokumentation oder detailliertere Anweisungen .
Fabianopinto
28

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 Ihnen eine leere Seite, die Sie ausfüllen können.

Zum Dokument 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
user2708060
quelle
26

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 jdk1.8.0_144.jdk durch Ihre heruntergeladene Version.)

dann source ~/.bash_profile

Dustinevan
quelle
22

Verwenden Sie jenv, es ist wie ein Java-Umgebungsmanager. Es ist super einfach zu bedienen und zu reinigen

Führen Sie für Mac 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 jenv die gewünschten Versionen von JVM 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
Slal
quelle
Das hat perfekt für mich funktioniert, danke!
Fernando Gabrieli
Ich benutze ein ähnliches Tool: sdkman.io/usage - IMHO viel besserer Ansatz als manuelle Aliase usw.
SathOkh
12
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 $@`
    export PATH=$JAVA_HOME/bin:$PATH
  fi
}

setzen dies in Ihrer ~ / .profile und verwenden Sie es in Ihrem Terminal wie so setjdk 1.8, setjdk 1.7, setjdk 9etc etc ...

Wenn Sie nicht haben, removeFromPathdann ist es:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

Gabriel Reiser
quelle
12

Vier einfache Schritte mit dem Terminal für Personen, die den Standardprozess verwenden .. :)

  1. echo $JAVA_HOMEgibt dir aktuelles Java-Zuhause. Zum Beispiel:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/

  2. cd /Library/Java/JavaVirtualMachines/ Sie gelangen zu dem Ordner, in dem Sie normalerweise jdks installieren (dies kann für Ihre Computer anders sein).

  3. lszeigen Sie verfügbare Ordner ( in der Regel wird es die Versionsnummern hat, zum Beispiel: jdk1.8.0_191.jdk openjdk-11.0.2.jdk)
  4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' wird das Java-Zuhause ändern ..
Abbin Varghese
quelle
8

Fügen Sie der ~/.zshenvDatei den folgenden Befehl hinzu

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 
xsilen T.
quelle
8

macOS El Capitan oder höher wählt die höhere Version des JDK aus, die in verfügbar /Library/Java/JavaVirtualMachinesist. Um ein Downgrade durchzuführen, können Sie die Datei Info.plistin eine andere Info.plist.disabledVersion umbenennen, sodass das Betriebssystem eine frühere Version auswählt.

Joaquín L. Robles
quelle
Einfachster Weg zu (: Danke
Satheesh Srinivasan
6

Aus der offiziellen Manpage java_home (1) von Apple :

**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`
Antonio
quelle
6

Wenn Sie es immer noch nicht einstellen können. mit diesem Befehl.

export JAVA_HOME =/usr/libexec/java_home -v 1.8

dann musst du diesen benutzen.

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

es wird sicherlich funktionieren.

RohitKumar
quelle
6

Finden Sie zuerst heraus, wo Sie die Umgebungsvariablen speichern.

  1. Emacs
  2. bash_profile
  3. zshrc-Datei

Schritte zum Einrichten der Umgebungsvariablen: -

  1. Laden Sie das JDK von JAVA herunter
  2. Installieren Sie es per Doppelklick
  3. Richten Sie nun Umgebungsvariablen in Ihrer Datei ein

    ein. Für emacs.profile können Sie diesen Link verwenden ODER den folgenden Screenshot sehen

Geben Sie hier die Bildbeschreibung ein

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)

Alles eingestellt Jetzt können Sie die JAVA-Version einfach aktualisieren oder herabsetzen.

Vrushali Raut
quelle
5

JDK-Switch-Skript

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)
Marcello de Sales
quelle
4

Sie können es zu Ihrem .bash_profile hinzufügen, um die Version standardmäßig festzulegen.

//Open bash profile
open ~/.bash_profile

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

// run bash profile
source ~/.bash_profile
Amin Agha
quelle
Vielen Dank! Beachten Sie, dass Sie die `-Zeichen einfügen müssen. und natürlich ersetzen Sie 1.8 durch die Version, die Sie möglicherweise benötigen. In meinem Fall 13.0.2
Jamie S
3

Wenn Sie Fisch verwenden und einen Mac verwenden und zwischen JDKs wechseln möchten, funktioniert das unten für mich auf einem Mac.

@ kenglxns Antwort hat bei mir nicht funktioniert und ich habe herausgefunden, dass bcos nicht -g gesetzt hat, was 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 zu wissen, 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
Gob00st
quelle
2

Wenn Sie mehrere Versionen haben und etwas mit einer bestimmten Version ausführen möchten, verwenden Sie dieses Beispiel:

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
MonstroDev
quelle
2

Basierend auf der Antwort von @markhellewell habe ich einige Alias-Funktionen erstellt, die dies für Sie erledigen. 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

Alex
quelle
2

Hier ist, wie ich es unter meinem Linux (Ubuntu / Mint Mate) mache. Ich denke, Mac kann es ähnlich machen.


Installiere & konfiguriere

Schritte:

  • [Basic - Teil]
  • Laden Sie jdk (die .tgz- Datei) herunter. von Hand .
  • Dekomprimieren und richtig umbenennen, an einem geeigneten Ort.
    z.B /mnt/star/program/java/jdk-1.8
  • Erstellen Sie einen Softlink, der später geändert wird, um die Java-Version zu wechseln.
    zB ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
    So /mnt/star/program/java/javaist der Softlink.
  • In JAVA_HOMEeinem Startskript festlegen.
    Könnte Datei wie verwenden /etc/profile.d/eric.shoder einfach verwenden ~/.bashrc.
    z.BJAVA_HOME=/mnt/star/program/java/java
  • Öffnen Sie dann eine neue Bash-Shell. java -versionsollte die Java-Version drucken.
  • [Mehr Version - Teil]
  • Laden Sie nach Bedarf weitere Java-Versionen herunter und installieren Sie sie, ähnlich wie in den obigen Schritten.
    z.B
    /mnt/star/program/java/jdk-11
  • [Schalterteil]
  • In ~/.bashrcdefinieren Variable für verschiedene Java - Version.
    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
  • In ~/.bashrcdefiniert Befehl Java - Version zu wechseln.
    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 die Änderungen wirksam.
  • Dann könnte mit den definierten Befehlen umgeschaltet werden.

Befehle - von oben config

Befehle:

  • jv11
    Wechseln Sie zu Java 11
  • jv8
    Wechseln Sie zu Java 8
  • jvd
    Wechseln Sie zur Standard-Java-Version, die _E_JAVA_HOME_Doben definiert ist.
  • jv
    Java-Version anzeigen.

Beispielausgabe:

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 durch Ändern des Softlinks, der als verwendet wird JAVA_HOME.

Tipps

  • Wenn ich jdk von Hand auf meinem Computer installiere, behalte ich die Nebenversion bei und stelle dann einen Softlink mit der Hauptversion her, jedoch ohne die Nebenversion.
    zB
    // das ist das eigentliche dir,
    jdk1.8.0_191

    // Dies ist ein weicher Link zu jdk1.8.0_191
    jdk-8

    // Dies ist ein weicher Link zu jdk-8oderjdk-11
    java

  • Ich definiere Befehlsalias in ~/.bashrc, definiere aber Variable in einer separaten Datei.
    Ich benutze ~/.eric_var, um die Variablen zu definieren, und ~/.bashrcwerde es beschaffen (zB source $HOME/.eric_var).

Eric Wang
quelle
1

Eine einfache Möglichkeit, ein separat installiertes JDK in die von angegebene Liste aufzunehmen, /usr/libexec/java_home -Vbesteht darin, das Verzeichnis wie folgt zu verknüpfen:

sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk

Verwenden Sie beispielsweise Folgendes, um das in Android Studio enthaltene JDK (1.8.0_152 zum Zeitpunkt des Schreibens) zu registrieren:

sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk

Jetzt java_homewird das JDK unter aufgelistet Matching Java Virtual Machinesund Sie können es wie oben beschrieben auswählen.

friederbluemle
quelle
1

Ich habe es für das lokale Terminal mit gemacht

export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)

alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'

export JAVA_HOME=$JAVA_13_HOME
Trackhe
quelle
-6

ZU EINFACHE LÖSUNG: Was für Kopfschmerzen - das war eine schnelle und einfache Lösung, die für mich funktioniert hat.

Mac OS Sierra Version 10.12.13

  1. Verwenden Sie die Tastenkombinationen: CMD + UMSCHALT + G - geben Sie "/ Library /" ein.

  2. Suchen Sie den JAVA-Ordner

  3. Rechtsklick Java-Ordner = In den Papierkorb verschieben (Passwort erforderlich)

  4. Installieren Sie: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Laden Sie das Javascript SDK herunter

  5. Stellen Sie sicher, dass der neue JAVA-Ordner in / LIBRARY / angezeigt wird.
  6. Installieren Sie Eclipse | Installieren Sie Eclipse IDE für Java-Entwickler
  7. Boom Done
eric323
quelle