Switching Java versions on Mac OS

The Java JDK install 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 version 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. Adding 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.