# Installing different versions of open jdk through Homebrew(assuming already installed) and already having Java 8. We need to install a tool called **jenv** - Java version manager which is similar to **nvm**(nodeJs version manager). ``` brew install jenv ``` Export the jenv path to .bash_profile or .zshrc - whatever you are using. I am using .zshrc ``` echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc echo 'eval "$(jenv init -)"' >> ~/.zshrc ``` After executing above command make sure you are having the below in ~/.zshrc ``` export PATH="$HOME/.jenv/bin:$PATH" eval "$(jenv init -)" ``` Then update the terminal using ``` source ~/.zshrc ``` Check the jenv health ``` jenv doctor ``` It will return something similar to this ``` [OK] No JAVA_HOME set [ERROR] Java binary in path is not in the jenv shims. [ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation. PATH : /usr/local/Cellar/jenv/0.5.2/libexec/libexec:/Users/gramcha/.jenv/shims:/Users/gramcha/.jenv/shims:/Users/gramcha/.jenv/bin:/Users/gramcha/.jenv/bin:/Users/gramcha/chromedriver:/opt/local/bin:/opt/local/sbin:/Users/gramcha/.jenv/shims:/Users/gramcha/.jenv/bin:/Users/gramcha/.jenv/bin:/Users/gramcha/chromedriver:/opt/local/bin:/opt/local/sbin:/Users/gramcha/.jenv/shims:/Users/gramcha/.jenv/bin:/Users/gramcha/.jenv/shims:/Users/gramcha/.jenv/bin:/Users/gramcha/chromedriver:/opt/local/bin:/opt/local/sbin:/Users/gramcha/.nvm/versions/node/v10.17.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin [OK] Jenv is correctly loaded ``` No need to worry about error message as long as **Jenv is correctly loaded** is printed. To ensure that JAVA_HOME is correct ``` jenv enable-plugin export ``` Assuming Maven is used and to educate maven about Java version used ``` jenv enable-plugin maven ``` Intalling latest open jdk version(15) at the time of writing this script ``` brew install openjdk ``` It will printout ``` Updating Homebrew... ==> Downloading https://homebrew.bintray.com/bottles/openjdk-15.0.1.mojave.bottle.tar.gz ==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/a4f00dc8b4c69bff53828f32c82b0a6be41b23a69a7775a95cdbc9e01d9bdb68?response-content-disposition=attachment%3Bfilename%3D%22openjdk-15.0.1.mojave.bottle.tar.gz%22&Policy=eyJTdGF0ZW ######################################################################## 100.0% ==> Pouring openjdk-15.0.1.mojave.bottle.tar.gz ==> Caveats For the system Java wrappers to find this JDK, symlink it with sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk openjdk is keg-only, which means it was not symlinked into /usr/local, because it shadows the macOS `java` wrapper. If you need to have openjdk first in your PATH run: echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc For compilers to find openjdk you may need to set: export CPPFLAGS="-I/usr/local/opt/openjdk/include" ==> Summary 🍺 /usr/local/Cellar/openjdk/15.0.1: 614 files, 323.8MB ``` Execute the caveats suggested by above install ``` sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc export CPPFLAGS="-I/usr/local/opt/openjdk/include" ``` similarly if you want to install java8 execute below and follow the caveats. ``` brew install openjdk@8 ``` I already having AdoptOpenJDK 8 in my machine. In case if you want to install that ``` brew install AdoptOpenJDK/openjdk/adoptopenjdk{8,11} ``` Execute below command to see available JVM's in machine ``` /usr/libexec/java_home -V ``` It will print something like this ``` Matching Java Virtual Machines (2): 15.0.1, x86_64: "OpenJDK 15.0.1" /Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home 1.8.0_212, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home /Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home ``` Add java 15 and java 8 paths to jenv by copying path from above previous command output. ``` jenv add /Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home ``` It will print the below outputs respectively. ``` openjdk64-15.0.1 added 15.0.1 added 15.0 added openjdk64-1.8.0.212 added 1.8.0.212 added 1.8 added ``` Check the jenv for available versions ``` jenv versions ``` It will print below outputs ``` * system (set by /Users/gramcha/.jenv/version) 1.8 1.8.0.212 15.0 15.0.1 openjdk64-1.8.0.212 openjdk64-15.0.1 ``` Set system level version ``` jenv global 15.0 ``` and check the java version ``` java -version ``` and it should print 15.0 ``` openjdk version "15.0.1" 2020-10-20 OpenJDK Runtime Environment (build 15.0.1+9) OpenJDK 64-Bit Server VM (build 15.0.1+9, mixed mode, sharing) ``` Some of projects wants older version like java8 to support that add project wise version. Go inside the specific project folder and execute below command ``` jenv local 1.8 ``` This will create the .java-version file that describes which java version to use. To set the java specific version at teminal level execute that ``` jenv shell 1.8 ``` Check the `jenv versions` it should print ``` system * 1.8 (set by JENV_VERSION environment variable) 1.8.0.212 15.0 15.0.1 openjdk64-1.8.0.212 openjdk64-15.0.1 ```