Skip to content

Instantly share code, notes, and snippets.

@mosser
Created June 25, 2019 15:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mosser/c8ad113d1b42276f86ecc6c4640dae0f to your computer and use it in GitHub Desktop.
Save mosser/c8ad113d1b42276f86ecc6c4640dae0f to your computer and use it in GitHub Desktop.

How to manage multiple versions of Java on a Mac?

Homebrew can help you to manage a consistent installation of multiple JDks on the very same system. For example, one can install openJDK using the following cask:

lucifer:ace mosser$ brew tap adoptopenjdk/openjdk
lucifer:ace mosser$ brew cask install adoptopenjdk8
lucifer:ace mosser$ brew cask install adoptopenjdk11

Then to easily switch from one JDK to the other, the jenv command will help a lot.

lucifer:ace mosser$ brew install jenv
lucifer:ace mosser$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
lucifer:ace mosser$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
lucifer:ace mosser$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
lucifer:ace mosser$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
lucifer:ace mosser$ jenv enable-plugin export
lucifer:ace mosser$ jenv enable-plugin maven

Since the environment is now configured, it is possible to switch from one version of the JDL to the other using the jenv command. The global argument changes the configuration at the system level, and the local one changes the configuration for a given directory.

lucifer:tmp mosser$ jenv versions
* system (set by /Users/mosser/.jenv/version)
  1.8
  1.8.0.212
  11.0
  11.0.3
  openjdk64-1.8.0.212
  openjdk64-11.0.3
  
lucifer:tmp mosser$ jenv global 11.0
lucifer:tmp mosser$ mvn --version
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T15:00:29-04:00)
Maven home: /usr/local/Cellar/maven/3.6.1/libexec
Java version: 11.0.3, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
Default locale: en_CA, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.5", arch: "x86_64", family: "mac"

lucifer:tmp mosser$ jenv global 1.8
lucifer:tmp mosser$ mvn --version
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T15:00:29-04:00)
Maven home: /usr/local/Cellar/maven/3.6.1/libexec
Java version: 1.8.0_212, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre
Default locale: en_CA, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.5", arch: "x86_64", family: "mac"
lucifer:tmp mosser$ java global 11.0
Error: Could not find or load main class global

lucifer:tmp mosser$ jenv global 11.0
lucifer:tmp mosser$ jenv local 1.8
lucifer:tmp mosser$ mvn --version
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T15:00:29-04:00)
Maven home: /usr/local/Cellar/maven/3.6.1/libexec
Java version: 1.8.0_212, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre
Default locale: en_CA, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.5", arch: "x86_64", family: "mac"

lucifer:tmp mosser$ cd ..
lucifer:~ mosser$ mvn --version
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T15:00:29-04:00)
Maven home: /usr/local/Cellar/maven/3.6.1/libexec
Java version: 11.0.3, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
Default locale: en_CA, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.5", arch: "x86_64", family: "mac"
lucifer:~ mosser$ 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment