Articles

MungingData

jenv macht es einfach, mehrere Versionen von Java auf einem Mac-Computer auszuführen. Es macht es auch einfach, nahtlos zwischen Java-Versionen zu wechseln, wenn Sie Projekte wechseln.

Das Ausführen mehrerer Java-Versionen ist für Android- und Apache Spark-Entwickler wichtig. Spark-Entwickler sollten beispielsweise Java 8 für Spark 2-Projekte und Java 11 für Spark 3-Projekte verwenden.

Dieser Blogbeitrag zeigt Ihnen, wie Sie jenv auf Ihrem Computer einrichten und wie Sie die wichtigen Befehle verwenden.

jenv setup

Installieren Sie jenv mit brew install jenv. Dies ist ein Homebrew-Befehl.

jenv verwendet das Shim-Entwurfsmuster, um Befehle an die entsprechende Java-Version weiterzuleiten. Führen Sie diese Befehle aus, um Ihre PATH zu aktualisieren:

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrcecho 'eval "$(jenv init -)"' >> ~/.zshrc

Starten Sie Ihr Terminal neu, führen Sie echo $PATH aus und überprüfen Sie, ob die Ausgabe .jenv Pfade enthält, die den Standardpfadverzeichnissen vorangestellt sind. Hier ist die Ausgabe auf meinem Computer /Users/powers/.jenv/shims:/Users/powers/.jenv/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin .

Java 8 installieren

Hier ist der neueste Befehl zum Installieren von Java 8: brew cask install adoptopenjdk/openjdk/adoptopenjdk8.

brew cask install adoptopenjdk8 funktionierte früher, gibt aber jetzt zurück Error: Cask 'adoptopenjdk8' is unavailable: No Cask with this name exists.

brew cask install caskroom/versions/adoptopenjdk8 funktionierte auch, gibt aber jetzt zurück Error: caskroom/versions was moved. Tap homebrew/cask-versions instead.

Sobald Java heruntergeladen wurde, müssen wir Java fügen Sie es manuell zu jenv hinzu. Listen Sie die Java Virtual Machines mit ls -1 /Library/Java/JavaVirtualMachines auf.

Fügen Sie Java 8 zu jenv mit jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/ hinzu.

Legen Sie die globale Java-Version auf Ihrem Computer mit jenv global openjdk64-1.8.0.265 fest. Der genaue Befehl auf Ihrem Computer könnte etwas anders sein als jenv global openjdk64-1.8.0.272 . Finden Sie den genauen Namen der Version mit jenv versions.

Überprüfen Sie, ob die Befehle javac -version und java -version funktionieren.

Globale Java-Version festlegen

Auf Macs ist Java vorinstalliert. Es ist immer gut, die Verwendung von systeminstallierten Programmiersprachenversionen zu vermeiden (gilt auch für Python und Ruby). jenv macht es einfach, die Verwendung des Systems Java zu vermeiden.

Setzen Sie die globale Java-Version auf Java 8 mit jenv global openjdk64-1.8.0.265.

Dieser Befehl schreibt die Version einfach in die /Users/powers/.jenv/version Datei. Geben Sie cat /Users/powers/.jenv/version ein, um zu sehen, dass es sich nur um eine Datei mit einer einzigen Zeile handelt

openjdk64-1.8.0.272

Alle Java-Befehle werden an Java 8 weitergeleitet, nachdem die globale Version festgelegt wurde. Dies wird sicherstellen, dass wir vermeiden, die System-Java-Version zu treffen.

Set JAVA_HOME

Viele Java-Bibliotheken hängen davon ab, dass eine JAVA_HOME Umgebungsvariable gesetzt ist. Stellen Sie die Umgebungsvariable ein, indem Sie die folgenden Befehle ausführen:

jenv enable-plugin exportexec $SHELL -l

Führen Sie echo $JAVA_HOME aus und stellen Sie sicher, dass sie etwas wie /Users/powers/.jenv/versions/openjdk64-1.8.0.272 zurückgibt. Jetzt wird jede Bibliothek, die nach der JAVA_HOME Umgebung sucht, die festgelegt werden soll, keinen Fehler ausführen.

Führen Sie jenv doctor aus, um zu bestätigen, dass Ihr Setup gut ist. Sie sollten die folgende Ausgabe erhalten:

 JAVA_HOME variable probably set by jenv PROMPT Java binaries in path are jenv shims Jenv is correctly loaded

Java 11 installieren

Hier ist der Befehl zum Installieren von Java 11: brew cask install adoptopenjdk/openjdk/adoptopenjdk11.

Denken Sie daran, dass Java-Versionen manuell zu jenv hinzugefügt werden müssen. Listen Sie die Java Virtual Machines mit ls -1 /Library/Java/JavaVirtualMachines auf.

Fügen Sie Java 11 zu jenv mit jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/ hinzu.

Der Befehl jenv versions sollte nun Folgendes ausgeben:

 system 1.8 1.8.0.272 11 11.0 11.0.9* openjdk64-1.8.0.272 (set by /Users/powers/.jenv/version) openjdk64-11.0.9

Maven einrichten

which mvn gibt /usr/local/bin/mvn zurück, die Systemversion von Maven. Ähnlich wie bei Java möchten wir niemals Befehle mit dem System Maven ausführen. Verwenden wir jenv, um eine andere Version von Maven zu erhalten.

Aktivieren Sie das jenv Maven Plugin mit jenv enable-plugin maven und führen Sie dann which mvn aus, um zu überprüfen, ob die mvn Befehle werden ordnungsgemäß von einem jenv Shim erfasst. Der Befehl which mvn sollte so etwas wie /Users/powers/.jenv/shims/mvn .

Sie können überprüfen, ob Ihre Maven-Installation ordnungsgemäß funktioniert, indem Sie ein Projekt klonen und die Testsuite ausführen. Klonen Sie das JavaSpark-Projekt mit dem Befehl git clone [email protected]:MrPowers/JavaSpark.git .

cd in das Projektverzeichnis und führen Sie die Testsuite mit mvn test .

Sie können mvn -v eingeben, um die verwendete Maven-Version anzuzeigen. Mein Computer verwendet Maven 3.6.3 mit Java 8.

Sie können auch das deequ-Repo klonen und überprüfen, ob mvn test auch an diesem Repo arbeitet.

Lokale Java-Version für Projekte festlegen

Verwenden Sie den Befehl jenv local openjdk64-11.0.9, um ein bestimmtes Projekt standardmäßig auf Java 11 einzustellen.

Dadurch wird eine .java-version -Datei im Stammprojektordner hinzugefügt. Hier ein Beispiel.

Sie können das delta-examples-Repo mit git clone [email protected]:MrPowers/delta-examples.gitklonen, cd in das Verzeichnis kopieren und jenv versions ausführen, um zu überprüfen, ob das Projekt automatisch Java 11 verwendet.

Hier ist die jenv versions Ausgabe aus dem delta-examples-Projektstammverzeichnis:

 system 1.8 1.8.0.272 11 11.0 11.0.9 openjdk64-1.8.0.272* openjdk64-11.0.9 (set by /Users/powers/Documents/code/my_apps/delta-examples/.java-version)

jenvs Fähigkeit, Java-Versionen für verschiedene Projekte automatisch zu wechseln, ist sehr praktisch. Sie müssen nicht daran denken, die Java-Version manuell festzulegen, wenn Sie Projekte ändern.

Andere Möglichkeiten, Java-Versionen zu wechseln

Das AdoptOpenJDK-Projekt bietet Anleitungen, wie Sie manuell zwischen Java-Versionen wechseln können, wenn Sie jenv nicht verwenden möchten. Hier ist die Funktion, die sie bieten:

jdk() { version=$1 export JAVA_HOME=$(/usr/libexec/java_home -v"$version"); java -version }

Manuelles Umschalten ist möglich, aber wer möchte bei jedem Projektwechsel mentale Energie damit verschwenden, über Java-Versionen nachzudenken?

Nächste Schritte

jenv hilft Ihnen, Java auf Ihrem Mac zu verwalten, auch wenn Sie nur eine einzige Version verwenden müssen.

Die Verwaltung verschiedener Java-Versionen auf einem bestimmten Computer war ein großer Schmerz, bevor jenv kam. Jetzt müssen Sie nur noch ein paar Befehle ausführen und Ihr Computer kann so konfiguriert werden, dass er jede Java-Version ausführt. jenv macht es einfach, versehentlich mit dem System installierten Java-Pakete zu vermeiden.

jenv hat Plugins für SBT, Scala, Groovy und mehr eingebaut. Stellen Sie sicher, dass Sie die Plugins aktivieren, die für Ihre Workflows relevant sind.