There are many difficulties with Java, specially if you have to use multiple versions on your machine like you usual have to. Coming from Debian, this was quite easy with the alternative mechanisms, but on macOS?

Welcome jenv!

Jenv is a kind of package manager for all your Java versions, which helps you to switch between each of them pretty nicely, once you’ve set it up correctly.

Installation is as easy as open a cold one:

$ brew install jenv

Once done, it reminds you to add it to your shell rc, which is probably a good idea.

Quick side note: Make sure to create the proper directories too, otherwise the commands fail in a weird way:

$ mkdir -p ~/.jenv/version

One java to go

The easiest way to see your installed Java version sis via the java_home command:

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

So far, nothing much to switch, but we still want to add it to Jenv:

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home

oracle64-1.8.0.201 added
1.8.0.201 added
1.8 added

A quick look into ~/.jenv/versions to check, that it basically created some symlinks to your installation.

Make it two

There is still not much to do, for a Java version manager, when there is only one version. Time to install another one, this time AdoptOpenJdk:

$ brew cask install adoptopenjdk
$ brew cask install adoptopenjdk11

And another command to add it to Jenv:

$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home                                                             

openjdk64-11.0.9.1 added
11.0.9.1 added
11.0 added
11 added

Versions?

Now we have to versions installed, let’s check it:

$ jenv versions
* system (set by /Users/unexist/.jenv/version)
  openjdk64-11.0.9.1
  oracle64-1.8.0.201

And what about java_home:

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

How to use jenv?

All set up done, we can now do the following:

Set a java version

This can be done like this:

$ jenv global openjdk64-11.0.9.1

And verified like:

$ jenv versions
  system
  1.8
  1.8.0.201
  11
  11.0
  11.0.9.1
* openjdk64-11.0.9.1 (set by /Users/unexist/.jenv/version)
  oracle64-1.8.0.201