Over a million developers have joined DZone.

Switching Java Versions on MacOS [Snippets]

DZone's Guide to

Switching Java Versions on MacOS [Snippets]

Unsure of how to switch between multiple versions of Java on your Mac? Check out this quick tip to help you navigate those waters.

· Java Zone ·
Free Resource

Download Microservices for Java Developers: A hands-on introduction to frameworks and containers. Brought to you in partnership with Red Hat.

The Java JDK installed on MacOS has some interesting platform specific utilities, like...


...which tells you which Java version you’re currently using and where it’s installed. I have Java 9 currently installed and it tells me:


If you have multiple versions installed, adding -V will list all the versions and where they’re installed:

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    9, x86_64: "Java SE 9" /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
    1.8.0_101, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home

The next logical question from here would be, "How do I switch versions?" If you set your $PATH in a .profile or similar approach, you can eval java_home to add the current version to your path, but a neat trick discussed in one of the answers here (thanks to this SO user for this tip) uses the -v option to allow you to switch versions. Add a couple of aliases to your .profile like this...

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"

…and you’ve got a quick shortcut to switching between different versions.

Download Building Reactive Microservices in Java: Asynchronous and Event-Based Application Design. Brought to you in partnership with Red Hat

jdk ,java ,shortcut ,macos

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}