Mac OS X und mehrere Java-Versionen

333

Wie kann ich unter MacOS ein zusätzliches Java installieren? Ich habe jdk8 installiert und das funktioniert gut. Aber jetzt brauche ich eine JDK7-Installation für Entwicklungszwecke. Beim Versuch, die alte Version über eine DMG-Datei zu installieren, wird eine Warnung angezeigt, dass bereits eine neuere Version von Java installiert ist und das Installationsprogramm beendet wird.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

   /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

Wie installiere ich jdk7 zusätzlich zu diesem?

Danke
Dakky

Dakkar
quelle

Antworten:

493

Die sauberste Methode zum Verwalten mehrerer Java-Versionen auf einem Mac ist die Verwendung Homebrew.

Und innerhalb Homebrewverwenden Sie:

  • homebrew-cask um die Versionen von Java zu installieren
  • jenv um die installierten Versionen von Java zu verwalten

Wie auf http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html zu sehen ist , sind dies die folgenden Schritte.

  1. Installieren Sie Homebrew
  2. Installieren Sie Homebrew Jenv
  3. Installieren Sie das Homebrew-Fass
  4. Installieren Sie eine bestimmte Java-Version mit cask (siehe Abschnitt "Homebrew-Cask-Versionen" unten).
  5. Fügen Sie diese Version hinzu, damit jenv sie verwaltet
  6. Überprüfen Sie, ob die Version von jenv korrekt verwaltet wird
  7. Wiederholen Sie die Schritte 4 bis 6 für jede Java-Version, die Sie benötigen

Homebrew-Fass-Versionen

Fügen Sie den homebrew/cask-versionsHahn zu Homebrew hinzu, indem Sie:

brew tap homebrew/cask-versions

Dann können Sie sich alle verfügbaren Versionen ansehen:

brew search java

Dann können Sie die Version (en) installieren, die Sie mögen:

brew cask install java7
brew cask install java6

Und fügen Sie sie hinzu, damit sie wie gewohnt von jenv verwaltet werden.

jenv add <javaVersionPathHere>

Ich denke, dies ist der sauberste und einfachste Weg, dies zu tun.


Ein weiterer wichtiger Punkt, wie in Mac OS X 10.6.7 Java Path Current JDK erwähnt, verwirrend :

Für verschiedene Arten von JDKs oder Installationen haben Sie unterschiedliche Pfade

Sie können die Pfade der installierten Versionen überprüfen /usr/libexec/java_home -V, siehe Wie überprüfe ich, ob das Java JDK auf einem Mac installiert ist?

Unter Mac OS X Mavericks stellte ich Folgendes fest:

1) Integrierte JRE-Standardeinstellung: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) Von Apple heruntergeladene JDKs: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) Von Oracle heruntergeladene JDKs: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Ressourcen

Adrien Be
quelle
16
Es wäre gut zu erwähnen, dass Homebrew-Cask mit einem Befehl installiert werden kann, brew install caskroom/cask/brew-caskanstelle brew install caskeines Emacs-Plugins.
Unnawut
7
Bei der Implementierung dieser Lösung sind einige Probleme aufgetreten, darunter die jenvRückgabe des No such file or directory.Fehlers. Dieses Wiki hat mir geholfen, es zu lösen. github.com/gcuisinier/jenv/wiki/Trouble-Shooting
Juni
10
Ich würde hinzufügen, dass alle Java-Installationen in sind /Library/Java/JavaVirtualMachines/und wenn Sie sie mit jenv addIhnen hinzufügen, fügen Sie einen Pfad hinzu, der so aussieht /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. Prost!
Nikolay Tsenkov
14
Seit dem 23. Juni 2017 laufe ich, habe brew cask search java7aber kein Fass für "java7" gefunden.
Mingliang Liu
4
@MingliangLIU ja ich auch ... es ist wirklich scheiße. Ich habe auf Github Probleme damit gefunden, bei denen einige Problemumgehungen erwähnt wurden, aber ich konnte es nicht zum Laufen bringen. Also musste ich es "manuell" über die Webseiten "Java-Versionen herunterladen und installieren" von Apple und Oracle tun. /usr/libexec/java_home -VÜberprüfen Sie anschließend mit , welche Pfade installiert wurden.
Adrien Be
304

Deinstallieren Sie jdk8, installieren Sie jdk7 und installieren Sie jdk8 neu.

Mein Ansatz zum Wechseln zwischen ihnen (in .profile):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Dann können Sie einfach java7oder java8in ein Terminal eingeben, um die Version zu wechseln.

(Bearbeiten: aktualisiert, um Dylans Verbesserung für Java 9 hinzuzufügen)

Vegard
quelle
18
Bisher ist dies die beste Option für mich. Mit nur einem einfachen Befehl "java8" oder "java7" kann einfach zu jeder Version gewechselt werden. Vielen Dank für die Hilfe
MMHMasud
4
Großartig ! :) Und für andere wie mich können Sie verwenden: ls / Library / Java / JavaVirtualMachines, um zu sehen, welche Versionen verfügbar sind. Dann können Sie verschiedene 1.8.x-Versionen einschalten. Und außerdem müssen Sie export PATH = $ JAVA_HOME / bin: $ PATH
Nico
4
Danke für diesen einen. Ich wollte nur erwähnen, dass ich dies durch die Installation von jdk7 nach jdk8 geschafft habe (es ist nicht erforderlich, jdk8 zu deinstallieren).
Titus
6
Keine Ahnung, warum ich meine Zeit mit jenv verschwendet habe, da dies einfach funktioniert und Ihr Shell-Startup mit jenv init nicht um 0,5 Sekunden überladen wird.
Cvakiitho
2
Wenn Sie versuchen, Java 9 auf diese Weise zum Laufen zu bringen, sollte das Versionsargument für java_home für Java 9 einfach 9zB lautenexport JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley
125

Für macOS Sierra 420

Dieser Leitfaden wurde aus verschiedenen Quellen zusammengeschustert (Antworten oben sowie andere Beiträge) und funktioniert perfekt.

0. Wenn Sie es noch nicht getan haben, installieren Sie Homebrew.

Siehe https://brew.sh/

1. Installieren Sie jenv

brew install jenv

2. Fügen Sie jenv zum Bash-Profil hinzu

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Fügen Sie Ihrem Pfad jenv hinzu

export PATH="$HOME/.jenv/shims:$PATH"

4. Tippen Sie auf "Fass / Versionen".

Zu Ihrer Information: "Tap" erweitert die Liste der verfügbaren Repos, die Brew installieren kann, über die Standardliste der verfügbaren Repos von Brew hinaus.

brew tap caskroom/versions

5. Installieren Sie die neueste Version von Java

brew cask install java

6. Installieren Sie Java 6 (oder 7 oder 8, was auch immer Sie benötigen)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Schließen Sie möglicherweise das Terminal und starten Sie es neu, damit alle neuen ENV-Variablen angezeigt werden, die eingerichtet wurden.

7. Überprüfen Sie die Installationen

Alle Java-Versionen werden hier installiert: /Library/Java/JavaVirtualMachinesWerfen wir einen Blick darauf.

ls -la /Library/Java/JavaVirtualMachines

8. Fügen Sie jeden Pfad einzeln zu jenv hinzu.

Wir müssen "/ Contents / Home" zum Versionsordner hinzufügen. WARNUNG: Verwenden Sie die tatsächlichen Pfade auf Ihrem Rechner ... das sind nur Beispiel ‚s

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Überprüfen Sie, ob jenv OK registriert hat

jenv versions

10. Stellen Sie die zu verwendende Java-Version ein (global)

Wobei XX mit einem der Elemente in der obigen Versionsliste übereinstimmt.

jenv global XX

Überprüfen Sie die Java-Version

java -version

Überprüfen Sie die JenV-Versionen

Sollte auch die aktuelle Version anzeigen, die mit einem Sternchen verwendet wird.

jenv versions

ERLEDIGT


Schnelle zukünftige Referenz

Java-Versionen ändern

... Siehe die Liste der verfügbaren Java-Versionen

jenv versions

... dann, wo XX mit einem Element in der obigen Liste übereinstimmt

jenv global XX
Bob
quelle
1
Darüber hinaus starten Sie den Terminal nachbrew cask install java*
squeeish
1
Klare und gute Erklärung Schritt für Schritt.
Ritesh Singh
1
Fehler: Fass 'java8' ist nicht verfügbar: Es existiert kein Fass mit diesem Namen.
Alexey Sh.
6
java8 / 9/10 sind nicht mehr als Fässer erhältlich. Versuchen Sie dies stattdessen: "Brew Cask installieren adoptopenjdk / openjdk / adoptopenjdk8"
supi
1
brew tap caskroom/versionssollte seinbrew tap homebrew/cask-versions
Vyacheslav Cotruta
42

SDKMAN! ist ein großartiges Tool für die Verwendung mehrerer Versionen von Java, Gradle, Groovy, Kotlin und anderen JVM-Tools unter Mac OS. Das Installations- und Verwendungsdokument befindet sich eindeutig auf der Hauptwebsite.

(Ich habe keine Zugehörigkeit, nur einen glücklichen Benutzer).

Wenn ich als Beispiel in einem Terminalfenster Folgendes eingebe, wird eine Liste der verfügbaren Java SDK-Versionen angezeigt (der Kürze halber bearbeitet):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

Hier +bedeutet, dass die Version installiert ist. >Gibt an, welche Version derzeit verwendet wird. So installieren Sie eine Version:

$ sdk install java 7u141-zulu

So verwenden Sie eine Version in diesem Terminalfenster:

$ sdk use java 9ea170
Michael Ostern
quelle
sdkman unterstützt Versionen ab Java 1.7. Wenn Sie bereit sind, Java 1.6 zu verwenden, ist diese Lösung möglicherweise nicht für Sie geeignet.
Aykut Akıncı
sdkman ist großartig, aber sie unterstützen keine bestimmten Releases innerhalb einer Version. Zum Beispiel funktioniert Datastax Dev Center nur mit 1.8.0_151, aber ich kann das nicht mit sdkman angeben. Hoffentlich fügen sie weitere Versionen hinzu.
Eduardo Dennis
Wenn Sie eine lokale Version haben, können Sie sie in SDKMan installieren - sdkman.io/usage#localversion (aber ich habe sie nicht ausprobiert)
Michael Easter
6

Wie auf dieser Website zu finden, beginnen wir mit der Installation von jEnv

  1. Führen Sie dies im Terminal aus

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. Fügen Sie jEnv zum Bash-Profil hinzu

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. Bei der Erstinstallation ist jEnv kein JDK zugeordnet.

    Zum Beispiel habe ich gerade JDK 8 installiert, aber jEnv weiß nichts davon. So überprüfen Sie Java-Versionen auf jEnv

    Im Moment wurde nur die Java-Version (jre) auf dem System gefunden. Das *zeigt die aktuell ausgewählte Version. Im Gegensatz zu rvm und rbenv kann jEnv JDK nicht für Sie installieren. Sie müssen JDK manuell von der Oracle-Website installieren.

  4. Installieren Sie JDK 6 von der Apple-Website. Dadurch wird Java in installiert /System/Library/Java/JavaVirtualMachines/. Der Grund, warum wir Java 6 von der Apple-Website installieren, ist, dass SUN JDK 6 für MAC nicht entwickelt hat. Daher hat Apple eine eigene Bereitstellungsversion erstellt / geändert.

  5. Installieren Sie auf ähnliche Weise JDK7 und JDK8.

  6. Fügen Sie jEnv JDKs hinzu.

    JDK 6:

    JDK 7: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Überprüfen Sie die mit jenv installierten Java-Versionen

    http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. Jetzt haben wir 3 Java-Versionen auf unserem System. Verwenden Sie den Befehl, um eine Standardversion festzulegen

    jenv local <jenv version>

    Beispiel: Ich wollte, dass Jdk 1.6 IntelliJ startet

    jenv local oracle64-1.6.0.65
  9. Überprüfen Sie die Java-Version

    Java-Version http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

Das ist es. Wir haben jetzt mehrere Versionen von Java und können problemlos zwischen ihnen wechseln. jEnv bietet auch einige andere Funktionen, z. B. Wrapper für Gradle, Ant, Maven usw. und die Möglichkeit, JVM-Optionen global oder lokal festzulegen. Weitere Informationen finden Sie in der Dokumentation.

Dinesh Arora
quelle
5
Fügen Sie keine Bilder Ihrer Befehle ein, da dies das Kopieren / Einfügen erschwert. Verwenden Sie zum Hervorheben von Befehlen die Backticks "` "für ein einzelnes Wort oder einen kurzen Befehl oder rücken Sie Ihren Befehl mit 4 Leerzeichen in einer eigenen Zeile (oder einem Vielfachen von 4 in Listen) ein.
Seki
1
Danke Seki. Ich hatte Probleme, Bilder zu veröffentlichen, und habe lange versucht, sie zu formatieren, konnte sie aber nicht richtig machen. Vielen Dank für das Teilen der Backticks-Informationen.
Dinesh Arora
4
Ich denke, Sie haben vielleicht vier Mal dasselbe Bild verwendet.
Ellen Spertus
5

Ich finde diesen Java-Versionsmanager namens Jabba kürzlich und die Verwendung ist Versionsmanagern anderer Sprachen wie rvm (Ruby), nvm (Knoten), pyenv (Python) usw. sehr ähnlich. Außerdem ist er plattformübergreifend, sodass er definitiv verwendet werden kann Mac.

Nach der Installation wird in ~ / .jabba ein Verzeichnis erstellt, in das alle von Ihnen installierten Java-Versionen eingefügt werden. Es "Unterstützt die Installation von Oracle JDK (Standard) / Server JRE, Zulu OpenJDK (seit 0.3.0), IBM SDK, Java Technology Edition (seit 0.6.0) und von benutzerdefinierten URLs."

Die grundlegende Verwendung ist auf ihrem Github aufgeführt. Eine kurze Zusammenfassung zum Starten:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8
York Yang
quelle
4

Ich verwende Mac OS X 10.9.5. Auf diese Weise verwalte ich mehrere JDK / JRE auf meinem Computer, wenn ich eine Version zum Ausführen von Anwendung A und zum Verwenden einer anderen Version für Anwendung B benötige.

Ich habe das folgende Skript erstellt, nachdem ich online Hilfe erhalten hatte.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

Ich habe das obige Skript in die .profile-Datei eingefügt. Öffnen Sie einfach das Terminal, geben Sie vi .profile ein, hängen Sie das Skript mit dem obigen Snippet an und speichern Sie es. Sobald Sie ausgehen source .profile, wird Ihr Profilskript ausgeführt, ohne dass Sie das Terminal neu starten müssen. Geben java -versionSie nun ein, dass 1.7 als Ihre aktuelle Version angezeigt werden soll. Wenn Sie beabsichtigen, es auf 1.8 zu ändern, kommentieren Sie die Zeile setjdk jdk1.7.0_15.jdkund kommentieren Sie die Zeile aus setjdk jdk1.8.0_60.jdk. Speichern Sie das Skript und führen Sie es erneut mit dem Quellbefehl aus. Ich verwende diesen Mechanismus, um mehrere Versionen von JDK / JRE zu verwalten, wenn ich zwei verschiedene Maven-Projekte kompilieren muss, die unterschiedliche Java-Versionen benötigen.

ChaitanyaBhatt
quelle
3

Jenv auf Mac Sierra:

Wenn dies nach der Installation nicht funktioniert, führen Sie diese Fehlerbehebung durch, um dem Pfad eine ausführbare Java-Datei hinzuzufügen

export PATH="$HOME/.jenv/shims:$PATH"

obwohl eval "$(jenv init -)"könnte diesen Job machen. Der Grund dafür ist, dass der Ordner / bin nicht mehr vorhanden ist, wie auf der Homepage beschrieben. Stattdessen wird der Shim-Ordner als / bin verwendet.

  • Stellen Sie sicher, dass ~ / .jenv da ist
  • which java darf drucken / Bibliothek / ...
  • jenv global 1.8
  • Jenv Shell 1.8

Schließlich which javagibt Ihnen:

/Users/xxxx/.jenv/shims/java

CodeFarmer
quelle
3

Im gleichen Sinne wie @Vegard (leicht):

  • Installieren Sie die gewünschten JDKs mit Homebrew
  • Fügen Sie diese jdkBash-Funktion und eine Standardeinstellung in Ihre ein.profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
  • und dann, um Ihr JDK zu wechseln, können Sie tun

     jdk 9
     jdk 11
     jdk 13

Basierend auf https://github.com/AdoptOpenJDK/homebrew-openjdk .

hulius
quelle
0

Hier ist eine trockenere Version für Bash (basierend auf Vegards Antwort)

Ersetzen Sie 1.7 und 1.8 durch die Versionen, an denen Sie interessiert sind, und Sie erhalten einen Alias ​​namens "javaX". Dabei ist 'X' die Java-Version (7/8 im folgenden Snippet), mit der Sie problemlos die Version wechseln können

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done
elad.chen
quelle
0

Um neuere Versionen von OpenJDK zu installieren, verwende ich dies. Beispiel für OpenJDK 14:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

Aktuelle Informationen finden Sie unter https://github.com/AdoptOpenJDK/homebrew-openjdk .

Matthias Bohlen
quelle