Happy new near everyone!
This short article describes how to set up multiple JDKs on a Mac for quick switching. The motivation behind this was that after the upgrade from JDK 10 to
JDK 11 the @MockBeans annotation (originating from spring-boot-test) was not working anymore as methods from sun.misc.Unsafe had been deprecated. Due to an unwary brew update I suddenly had a new JDK on my system which broke the build of one of my projects.
I should note that this assumes you are using Homebrew as package manager to ease installation of binaries. This not only works for command line tools but also for OS X application, so you should really check it out.
OpenJDK releases are available in a tap, meaning a separate repository of brew casks. brew tap adds the required repository so that you can use the casks in them.
$ brew tap AdoptOpenJDK/openjdk
We can see the available casks like so
$ brew search /adoptopenjdk/
==> Casks
adoptopenjdk adoptopenjdk11 adoptopenjdk11-openj9 adoptopenjdk9
adoptopenjdk10 adoptopenjdk11-jre adoptopenjdk8
Now we can install the OpenJDK versions we want to use:
$ brew cask install adoptopenjdk11
$ brew cask install adoptopenjdk10
$ brew cask install adoptopenjdk8
Before we start: what is jenv?
jenv is a version manager for java installations for the command line. Note that it does not install the JDKs, it just manages the currently active java version and what’s more important, per working directory.
$ brew install jenv
I’m using zsh as shell for the command line. If you’re interested, have a look at oh-my-zsh also, this greatly improves the zsh experience with loads of plugins for all kinds of tools. To enable jenv on zsh I execute
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
Don’t forget to either source your *rc or to restart the shell so that the changes get effective.
jenvbrew installs the JDKs into the folder /Library/Java/JavaVirtualMachines/, we now need to register each of them with jenv:
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-10.jdk/Contents/Home/
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/
NOTE: the pathes may differ on your machine, so please make sure they exist!
You can check whether the JDKs have been added correctly if you use the jenv versions command
$ jenv versions
* system (set by /Users/dhiller/.jenv/version)
1.8
1.8.0.202
10.0
10.0.2
11.0
11.0.2
openjdk64-1.8.0.202
openjdk64-10.0.2
openjdk64-11.0.2
jenv to specify the current JDK to useNow that jenv knows the versions you can either set the JDK globally
$ jenv global 10.0
$ java -version
openjdk version "10.0.2" 2018-07-17
OpenJDK Runtime Environment AdoptOpenJDK (build 10.0.2+13)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 10.0.2+13, mixed mode)
or for a specific project in the project directory:
$ cd ~/projects/my_project
$ jenv local 1.8
$ java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_202-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.202-b08, mixed mode)
To unset the version
$ jenv global system
or
$ cd ~/projects/my_project
$ jenv local --unset
$ brew uninstall java
NOTE: I included this step because I had some interference on the command line, where jenv would not be able to override the chosen JDK, meaning that java -version still yielded the Oracle JDK. After I uninstalled the default Oracle JDK this went away. If you are using ~.zshrc or ~/.bashrc do not forget to remove manually setting JAVA_HOME and the like also as jenv will do that for you.
| Article | Source | Coverage |
|---|---|---|
| How do I install Java on Mac OSX allowing version switching? | Stackoverflow | Contains coverage of other version installers (SDKMAN, Jabba, manual install), manual version switching and the like |
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Last update on 2025-07-03.
Built by dhiller
using
Atom (editor),
Jekyll (site builder),
OneDark vivid (syntax highlighting theme),
Webjeda (related posts),
Disqus (discussions),
Github Pages (hosting),
Cloudflare (DNS).