Using jenv to select Java version on macOS

Written by Rob Allen / Original link on Dec. 2, 2020

When working on OpenWhisk, I discovered that it needed a different Java to the one I had installed. Looking around the Internet, I discovered jenv which shouldn't have surprised me as I use pyenv and I'm aware of rbenv too.

As I use Homebrew, these are the commands I used.

Firstly install jenv, the latest Java (15 at this time) and any other versions you need. Java 8 and 12 in this example:

$ brew install jenv
$ brew install java
$ brew tap AdoptOpenJDK/openjdk
$ brew cask install adoptopenjdk12
$ brew cask install adoptopenjdk8

We now add jenv to our terminal by adding the following to .bash_profile:

export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

Restart your terminal to pick up the change.

The next step is to add our Java versions to jenv:

$ jenv add /Library/Java/JavaVirtualMachines/jdk-15.0.1.jdk/Contents/Home/
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home/
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/

The exact versions depend on what you have installed. ls /Library/Java/JavaVirtualMachines/ will tell you.

Selecting the Java version

jenv's versions will provide you a list of the available versions on your system:

$ jenv versions
* system (set by /Users/rob/.jenv/version)

I like to set a given Java version on a per-directory basis using jenv local. For example to set Java 12 for OpenWhisk, I navigate to ~/Project/openwhisk and type:

$ jenv version 12

This will create a .java-version file in the directory with the specified version.

Whenever you I navigate to this directory or a sub-directory of it, then jenv will ensure that Java 12 will be used.

Job done!

roballen roballen

« Stop duplicating your Eloquent query scopes and constraints. Re-use them as select statements with a new Laravel packag… - Emphpathy »