374

How can I install an additional java on MacOS? I installed jdk8 and that works fine. but now I need a jdk7 installation for development purposes. When trying to install the old version via DMG file, i get a warning, that there is already a newer version of java installed and the installer quits.

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

   /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

How to install jdk7 in addition to this one?

Thanks
Dakky

Erik Kaplun
  • 33,421
  • 12
  • 92
  • 102
Dakkar
  • 4,540
  • 4
  • 19
  • 27
  • Warning: the Homebrew Java installation commands recommended by the top answers don't work anymore. See my answer for the latest commands or [this amazing answer](https://stackoverflow.com/a/52524114/1125159) that has all the latest commands with detailed explanations on the different approaches. – Powers Nov 08 '20 at 12:45

17 Answers17

536

The cleanest way to manage multiple java versions on Mac is to use Homebrew.

And within Homebrew, use:

  • homebrew-cask to install the versions of java
  • jenv to manage the installed versions of java

As seen on http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html , these are the steps to follow.

  1. install homebrew
  2. install homebrew jenv
  3. install homebrew-cask
  4. install a specific java version using cask (see "homebrew-cask versions" paragraph below)
  5. add this version for jenv to manage it
  6. check the version is correctly managed by jenv
  7. repeat steps 4 to 6 for each version of java you need

homebrew-cask versions

Add the homebrew/cask-versions tap to homebrew using:

brew tap homebrew/cask-versions

Then you can look at all the versions available:

brew search java

Then you can install the version(s) you like:

brew cask install java7
brew cask install java6

And add them to be managed by jenv as usual.

jenv add <javaVersionPathHere>

I think this is the cleanest & simplest way to go about it.


Another important thing to note, as mentioned in Mac OS X 10.6.7 Java Path Current JDK confusing :

For different types of JDKs or installations, you will have different paths

You can check the paths of the versions installed using /usr/libexec/java_home -V, see How do I check if the Java JDK is installed on Mac?

On Mac OS X Mavericks, I found as following:

1) Built-in JRE default: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) JDKs downloaded from Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) JDKs downloaded from Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Resources

Interlated
  • 2,849
  • 1
  • 34
  • 57
Adrien Be
  • 17,566
  • 15
  • 96
  • 134
  • 19
    It would be good to mention that homebrew-cask can be installed with command `brew install caskroom/cask/brew-cask` instead of `brew install cask` which is an Emacs plugin. – Unnawut Sep 24 '15 at 20:14
  • Do we have to delete the current installed version of Java (1.8), and reinstalling it with brew to be able to brew-manage both? – Andrea.cabral Feb 02 '16 at 16:48
  • 1
    Don't think you have to. As mentioned in the last step of the installation process, use `jenv add ` to let jenv know where it can find a given java version. – Adrien Be Feb 03 '16 at 10:22
  • I just wanted to mention, since it wasn't working for me. `brew cask install java7` downloads the package file but doesn't install it. You still need manually install it. Then you should be able to add the path to `jenv` Also, `brew cask search java` doesn't return java8 for some reason. – Sammy Kumar Feb 04 '16 at 16:43
  • 1
    @squid267 the cleanest way is to avoid homebrew. Try Vegard solution, I added a comment that should help you (but before download and install by yourself the jdk or jre you want http://www.oracle.com/technetwork/java/javase/downloads/index.html) – Nico Mar 03 '16 at 16:47
  • @squid267 did you open a ticket on [Github on `Homebrew Cask`'s repo](https://github.com/caskroom/homebrew-cask)? I doubt this is a normal behavior. – Adrien Be Mar 04 '16 at 09:44
  • @Nico Why would you avoid a generic solution that was [contributed by 100 people since April 2012](https://github.com/caskroom/homebrew-cask/graphs/contributors) & tested by 10s of thousands? it has 2,315 Closed vs 64 Opened issues... just look at the repo, numbers speak for themselves, it's a pretty damn good tool – Adrien Be Mar 04 '16 at 09:50
  • @AdrienBe I tried homeBrew two years ago and I encountered several problems when I wanted to change for example mysql versions, then I decided to do things by my own. But you must be right, maybe today this tool is better. I think it's a choice, for people confortable with mac os command lines and system administration maybe avoid homebrew is better in order to keep a better view of what is installed. – Nico Mar 04 '16 at 10:11
  • @Nico yeah, in the end one should just try out & choose whatever (s)he feels comfortable with. Some tools are just irrelevant if you have the relevant skills already, sys admin stuff in this case. Although one could actually like this as it avoids you having to do repetitive work... – Adrien Be Mar 04 '16 at 10:55
  • 9
    I ran into a few problems while implementing this solution, one of which was with `jenv` returning the `No such file or directory.` error. This wiki helped solve it for me. https://github.com/gcuisinier/jenv/wiki/Trouble-Shooting – juil Aug 22 '16 at 20:41
  • 11
    I would add that all java installs would be in `/Library/Java/JavaVirtualMachines/` and when adding them with `jenv add` you add path looking like this `/Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/`. Cheers! – Nikolay Tsenkov Oct 11 '16 at 09:28
  • @SammyKumar I think java8 isn't listed because 8 is what you get by default when you just use `brew cask install java` – matt burns Dec 01 '16 at 17:00
  • 16
    As of Jun 23 2017, I run `brew cask search java7` but got No Cask found for "java7". – Mingliang Liu Jun 24 '17 at 00:37
  • 5
    @MingliangLIU yeah me too... it really sucks. I found issues about this on Github were they mentioned some work arounds but I could not get it to work. So I ended up having to do it "the manual way" via apple and oracle's "Java versions download and install" web pages. Then using `/usr/libexec/java_home -V` to double check the paths where these were installed. – Adrien Be Jun 27 '17 at 16:44
  • @AdrienBe Thanks for sharing this. As this is confirmed, I'll also install manually. Hadoop 2 is still using Java 7, unfortunately... – Mingliang Liu Jun 27 '17 at 22:30
  • 2
    Step 2.5. `$ eval "$(jenv init -)"` as per linked page. – PJSCopeland Oct 09 '17 at 20:43
  • 1
    is there a way to install a specific version with Java8. For eg 1.8.0_151-b12 or older within Java 8? thanks – Jay Oct 18 '17 at 15:52
  • I really want this to work.. but unfortunately I couldn't find a way to use openjdk.. – jrhee17 Jun 05 '18 at 13:27
  • @AdrienBe you should update your answer with the current ways to install java, which is cask "brew cask install java8" "brew cask install java-beta" "brew cask install java" "brew cask install java7" .. there is no tap anymore. changed a lot. Thanks for the brief answer – Eugen Mayer Sep 22 '18 at 10:14
  • It took awhile for me to figure out the path to Java Home for the instruction, jenv add . If you put the command, /usr/libexec/java_home -V just below it would be a good enhancement. – antimatter May 08 '20 at 10:38
  • For [Homebrew 2.6.0+](https://brew.sh/2020/12/01/homebrew-2.6.0/#:~:text=All%20brew%20cask%20commands%20have,Homebrew.), replaces `cask install` with `install --cask`. – Minh Nghĩa Jan 19 '21 at 11:54
341

Uninstall jdk8, install jdk7, then reinstall jdk8.

My approach to switching between them (in .profile) :

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Then you can simply type java7 or java8 in a terminal to switch versions.

(edit: updated to add Dylans improvement for Java 9)

Vegard
  • 4,052
  • 1
  • 16
  • 27
  • 20
    So far this is the best option for me. easily can switch to any version with just a simple command "java8" or "java7". Thanks for the help – M.M.H.Masud Aug 10 '15 at 17:08
  • 5
    Great ! :) And for other like me you can use : ls /Library/Java/JavaVirtualMachines to see which versions are available. Then you can switch on different 1.8.x versions. And also you have to add export PATH=$JAVA_HOME/bin:$PATH – Nico Mar 03 '16 at 16:44
  • 4
    Thanks for this one. I just wanted to mention that I've managed to do this by installing jdk7 after jdk8 (there is no need to uninstall jdk8). – Titus Jul 21 '16 at 10:36
  • 7
    Dunno why I wasted my time with jenv, as this just works, and does not clutter your shell startup by 0.5s with jenv init. – cvakiitho Aug 22 '17 at 13:14
  • 2
    If you are trying to get java 9 working in this fashion, the version argument to java_home for java 9 should simply be `9` e.g. `export JAVA_9_HOME=$(/usr/libexec/java_home -v9)` – Dylan Nissley Oct 10 '17 at 10:27
  • 1
    Thanks for this! Had Java8 installed with homebrew already, installed 9 as well, did this (sans jdk7) and it seems to be working. – ryanlutgen Mar 20 '18 at 05:06
  • 3
    great solution! – TastyCode Jun 17 '18 at 19:23
  • 2
    This should be the accepted answer, much simpler than installing extraneous software, especially if you're using a corporate managed Mac where there are restrictions on software that can be installed. – Oliver Hernandez Jul 17 '18 at 13:04
  • Along similar lines, you can also use a tool like direnv to specify Java versions per project so you don't need to remember to switch yourself. All it does it automatically set JAVA_HOME. I've outlined this approach here: https://gist.github.com/badsyntax/4c66a0f09f545320e52bb4a559777a88 – badsyntax Jan 25 '19 at 21:22
  • @Vegard Wonderful. Thanks +1 for this. – Anish B. Jan 04 '20 at 04:26
  • 1
    unless I'm mistaken, the alias commands shouldn't have backticks (`) around them but instead single quotes ('). Otherwise the alias just gets set to the output of the export command (blank) rather than the export command itself – willrochathomas Mar 03 '20 at 11:16
  • Yes, that was a late edit from someone else, I'll revert. Thanks @willrochathomas. – Vegard Mar 03 '20 at 12:39
  • This is the answer guys. `/usr/libexec/java_home` is awesome. Read about it a bit more. It's all you need. – John Red Apr 26 '20 at 11:34
  • 1
    If you are on Big Sur, make sure to follow the advice outlined in [this](https://stackoverflow.com/a/64917842/5114189) answer. Looks like Big Sur broke the way `usr/libexec/java_home` worked in previous versions, so setting `JAVA_HOME` in advance won't work. – msilb Dec 27 '20 at 15:19
144

For macOS Sierra 420

This guide was cobbled together from various sources (replies above as well as other posts), and works perfect.

0. If you haven't already, install homebrew.

See https://brew.sh/

1. Install jenv

brew install jenv

2. Add jenv to the bash profile

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Add jenv to your path

export PATH="$HOME/.jenv/shims:$PATH"

4. Tap "caskroom/versions"

FYI: "Tap" extends brew's list of available repos it can install, above and beyond brew's default list of available repos.

brew tap caskroom/versions

5. Install the latest version of java

brew cask install java

6. Install java 6 (or 7 or 8 whatever you need)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Maybe close and restart Terminal so it sees any new ENV vars that got setup.

7. Review Installations

All Java version get installed here: /Library/Java/JavaVirtualMachines lets take a look.

ls -la /Library/Java/JavaVirtualMachines

8. Add each path to jenv one-at-a-time.

We need to add "/Contents/Home" to the version folder. WARNING: Use the actual paths on your machine... these are just EXAMPLE's

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Check if jenv registered OK

jenv versions

10. Set java version to use (globably)

Where XX matches one of the items in the versions list above.

jenv global XX

Check java version

java -version

Check jenv versions

Should also indicate the current version being used with an asterisk.

jenv versions

DONE


Quick future reference

To change java versions

... See the list of available java versions

jenv versions

... then, where XX matches an item in the list above

jenv global XX
bob
  • 6,069
  • 1
  • 39
  • 35
  • 1
    Additionally, restart your terminal after `brew cask install java*` – squeeish Nov 22 '18 at 02:29
  • 1
    Clear and great explanation step by step. – Ritesh Singh Mar 12 '19 at 16:37
  • 1
    Error: Cask 'java8' is unavailable: No Cask with this name exists. – Alexey Sh. Aug 27 '19 at 09:53
  • 7
    java8/9/10 arent available anymore as casks. Try this instead: " brew cask install adoptopenjdk/openjdk/adoptopenjdk8 " – supi Sep 05 '19 at 02:49
  • By default `jenv` does not set `JAVA_HOME` environment variable. You need to enable the plugin by `jenv enable-plugin export`. – cakraww Sep 10 '19 at 00:37
  • 3
    `brew tap caskroom/versions` should be `brew tap homebrew/cask-versions` – Vyacheslav Cotruta Sep 20 '19 at 11:09
  • Great work! Even better than steps 7, 8 use - `/usr/libexec/java_home -V` and then `jenv add ` or you could script it - `for ver in $(/usr/libexec/java_home -V 2>&1 >/dev/null | grep -v Matching | awk '{print $1}'); do echo X: $(jenv add $(/usr/libexec/java_home -v$ver)); done` – HankCa Dec 12 '19 at 00:37
  • The `2>&1 >/dev/null` is because the versions from java_home are printed to `STDERR` and the actual version being used is printed to `STDOUT`. – HankCa Dec 12 '19 at 00:39
  • Great instructions; I'm on osx 10.15.3; step 3 above duplicates step 2; also, /Library/Java/Extensions was working for Java SE 8, but doesn't work for adoptopenjdk-9, so I use "java -cp 'path_to_jars'" instead, which is awkward. – pob Apr 06 '20 at 22:20
  • When running `jenv add <>`, if you get an error like this : `ln: ~/.jenv/versions/openjdk64-11.0.8: No such file or directory`, then it means .jenv/versions folder is missing; creating one (`mkdir ~/.jenv/versions`), then re-running `jenv add <>` should solve the problem – Taoufik Mohdit Oct 14 '20 at 18:56
45

SDKMAN! is a great tool for using multiple versions of Java, Gradle, Groovy, Kotlin, and other JVM tools on Mac OS. Installation and usage doc are plainly on the main site.

(I have no affiliation, just a happy user).

As an example usage, if I type the following in a Terminal window, there is a list of available Java SDK versions (edited for brevity):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

Here + denotes that the version is installed. > denotes which version is currently in use. To install a version:

$ sdk install java 7u141-zulu

To use a version in this Terminal window:

$ sdk use java 9ea170
Michael Easter
  • 21,462
  • 7
  • 70
  • 97
  • sdkman supports versions starting with java 1.7. If you're willing to use java 1.6 this solution may not be suitable for you. – Aykut Akıncı Mar 07 '18 at 10:56
  • sdkman is great, but they dont support specific releases within a version. For example Datastax Dev Center only works with 1.8.0_151 but I can't specify that with sdkman. Hopefully they add more versions. – Eduardo Dennis Jun 11 '18 at 14:43
  • 1
    If you have a local version, I think you can install it into SDKMan - https://sdkman.io/usage#localversion (but I haven't tried it) – Michael Easter Jun 11 '18 at 15:08
6

As found on this website So Let’s begin by installing jEnv

  1. Run this in the terminal

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
    
  2. Add jEnv to the bash profile

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
    
  3. When you first install jEnv will not have any JDK associated with it.

    For example, I just installed JDK 8 but jEnv does not know about it. To check Java versions on jEnv

    At the moment it only found Java version(jre) on the system. The * shows the version currently selected. Unlike rvm and rbenv, jEnv cannot install JDK for you. You need to install JDK manually from Oracle website.

  4. Install JDK 6 from Apple website. This will install Java in /System/Library/Java/JavaVirtualMachines/. The reason we are installing Java 6 from Apple website is that SUN did not come up with JDK 6 for MAC, so Apple created/modified its own deployment version.

  5. Similarly install JDK7 and JDK8.

  6. Add JDKs to jEnv.

    JDK 6:

    JDK 7: http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Check the java versions installed using jenv

    http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. So now we have 3 versions of Java on our system. To set a default version use the command

    jenv local <jenv version>
    

    Ex – I wanted Jdk 1.6 to start IntelliJ

    jenv local oracle64-1.6.0.65
    
  9. check the java version

    java -version http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

That’s it. We now have multiple versions of java and we can switch between them easily. jEnv also has some other features, such as wrappers for Gradle, Ant, Maven, etc, and the ability to set JVM options globally or locally. Check out the documentation for more information.

Dinesh Arora
  • 1,652
  • 2
  • 20
  • 27
  • 6
    Do not put images of your commands, it makes difficult to copy/paste them. To highlight commands, use the backticks "`" for a single word or a short command, or indent your command with 4 spaces on its own line (or multiples of 4 in lists). – Seki Aug 05 '16 at 10:48
  • 1
    Thanks Seki. I was struggling to post images and spent a long time trying to format but could not get it right. Thanks for sharing the backticks info. – Dinesh Arora Aug 05 '16 at 17:20
  • 4
    I think you may have used the same image four times. – Ellen Spertus May 18 '18 at 20:00
5

I find this Java version manager called Jabba recently and the usage is very similar to version managers of other languages like rvm(ruby), nvm(node), pyenv(python), etc. Also it's cross platform so definitely it can be used on Mac.

After installation, it will create a dir in ~/.jabba to put all the Java versions you install. It "Supports installation of Oracle JDK (default) / Server JRE, Zulu OpenJDK (since 0.3.0), IBM SDK, Java Technology Edition (since 0.6.0) and from custom URLs.".

Basic usage is listed on their Github. A quick summary to start:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8
York Yang
  • 446
  • 7
  • 12
4

I am using Mac OS X 10.9.5. This is how I manage multiple JDK/JRE on my machine when I need one version to run application A and use another version for application B.

I created the following script after getting some help online.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

I put the above script in .profile file. Just open terminal, type vi .profile, append the script with the above snippet and save it. Once your out type source .profile, this will run your profile script without you having to restart the terminal. Now type java -version it should show 1.7 as your current version. If you intend to change it to 1.8 then comment the line setjdk jdk1.7.0_15.jdk and uncomment the line setjdk jdk1.8.0_60.jdk. Save the script and run it again with source command. I use this mechanism to manage multiple versions of JDK/JRE when I have to compile 2 different Maven projects which need different java versions.

ChaitanyaBhatt
  • 695
  • 7
  • 8
4

Jenv on Mac Sierra:

if not working after install, do this bug fix to add java executable to path

export PATH="$HOME/.jenv/shims:$PATH"

even though eval "$(jenv init -)" could do this job. The reason is /bin folder is not there anymore as describe in it's homepage, but shim folder is used as /bin instead.

  • Make sure ~/.jenv is there
  • which java may print /Library/...
  • jenv global 1.8
  • jenv shell 1.8

Eventually, which java gives you:

/Users/xxxx/.jenv/shims/java

CodeFarmer
  • 2,326
  • 18
  • 30
4

In the same spirit than @Vegard (lightweight):

  • Install the wanted JDKs with Homebrew
  • Put this jdk bash function and a default in your .profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
    
  • and then, to switch your jdk, you can do

     jdk 9
     jdk 11
     jdk 13
    

Based on https://github.com/AdoptOpenJDK/homebrew-openjdk.

hulius
  • 129
  • 7
1

I answer lately and I really recommand you to use SDKMAN instead of Homebrew.

With SDKMAN you can install easily different version of JAVA in your mac and switch from on version to another.

Java in your mac

You can also use SDKMAN for ANT, GRADLE, KOTLIN, MAVEN, SCALA, etc...

To install a version in your mac you can run the command sdk install java 15.0.0.j9-adpt cmd

bdzzaid
  • 573
  • 5
  • 12
0

Here's a more DRY version for bash (Based on Vegard's answer)

Replace 1.7 and 1.8 with whatever versions you are interested with and you'll get an alias called 'javaX'; where 'X' is the java version (7 / 8 in the snippet below) that will allow you to easily switch versions

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done
elad.chen
  • 2,182
  • 5
  • 22
  • 32
0

To install more recent versions of OpenJDK, I use this. Example for OpenJDK 14:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

See https://github.com/AdoptOpenJDK/homebrew-openjdk for current info.

Matthias Bohlen
  • 401
  • 2
  • 7
0

I followed steps in below link - https://medium.com/@euedofia/fix-default-java-version-on-maven-on-mac-os-x-156cf5930078 and it worked for me.

cd /usr/local/Cellar/maven/3.5.4/bin/
nano mvn
--Update JAVA_HOME -> "${JAVA_HOME:-$(/usr/libexec/java_home)}"
mvn -version
Sanchi Girotra
  • 852
  • 8
  • 12
0

New commands for installing Java via Homebrew:

  • brew cask install adoptopenjdk/openjdk/adoptopenjdk8
  • brew cask install adoptopenjdk/openjdk/adoptopenjdk11

See the homebrew-openjdk repo for the latest commands.

Installing Java

You can install Java via Homebrew, Jabba, SDKMAN or manually. See this answer for details on all the commands.

Switching Java versions*

You can switch Java versions with jenv Jabba, SDKMAN or manually. See details on all the switching commands here.

Best solutions

  • Jabba is designed to work on multiple platforms, so it's a good option if you want a solution that'll also work on Windows
  • Using Homebrew to download Java versions and jenv to switch versions provides a nice workflow. jenv makes it easy to work with Java versions stored in any directory on your machine, so it's a good alternative if you're interested in storing Java in non-default directories.
  • Using SDKMAN to download Javas and switch versions is another great alternative
  • Manually switching should be avoided because it's an unnecessary headache.

Function to manually switch Java versions

Here's the Bash / ZSH function for manually switching Java versions (by OpenJDK):

jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
 }

There are great tools for switching Java versions, so I highly recommend against doing it manually.

Powers
  • 12,561
  • 7
  • 60
  • 82
0

Manage multiple java version in MAC using jenv

  1. Install homebrew using following command

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

  1. install jenv and activate jenv

brew install jenv

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

  1. tap cask-versions

brew tap homebrew/cask-versions

  1. search available java version that can be installed

brew search java

  1. E.g. to install java6 use following command

brew install cask java6

  1. Add multiple versions of java in jenv

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

jenv add /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Note:- if you get error like “”ln: /Users//.jenv/versions/oracle64-1.8.0.231: No such file or directory, then run following:-

mkdir -p /Users//.jenv/versions/oracle64-1.8.0.231

  1. Rehash jenv after adding jdk’s

jenv rehash

  1. List known versions of java to jenv

jenv versions

  1. Set default version

jenv global oracle64-1.8.0.231

  1. Change java version for a project

jenv local oracle64-1.6.0.65

  1. set JAVA_HOME with the same version as jenv

jenv exec bash

echo $JAVA_HOME

Mayur
  • 156
  • 1
  • 5
0

First, you need to make certain you have multiple JAVA versions installed. Open a new Terminal window and input:

/usr/libexec/java_home -V

Your output should look like:

Matching Java Virtual Machines (2):
11.0.1, x86_64: "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
1.8.0_201, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home

Note that there are two JDKs available. If you don’t notice the Java version you need to switch to, download and install the appropriate one from here (JDK 8 is represented as 1.8) . Once you have installed the appropriate JDK, repeat this step.

  1. Take note of the JDK version you want to switch to. For example, “11.0” and “1.8” are the JDK versions available in the example above.

  2. Switch to the desired version. For example, if you wish to switch to JDK 8, input the following line:

    export JAVA_HOME=/usr/libexec/java_home -v 1.8

For 11.0, switch “1.8” with “11.0” 4. Check your JDK version by inputting into Terminal:

java -version

If you have followed all the steps correctly, the JDK version should correlate with the one you specified in the last step. 5. (Optional) To make this the default JDK version, input the following in Terminal:

open ~/.bash_profile

Then, add your Terminal input from step 3 to this file:

SWITCH TO JAVA VERSION 8

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

Save and close the file.

TanvirChowdhury
  • 1,851
  • 13
  • 21
0

Here is a great tutorial https://medium.com/@chamikakasun/how-to-manage-multiple-java-version-in-macos-e5421345f6d0 by using jEnv installed by brew

or you can check out homebrew-openjdk https://github.com/AdoptOpenJDK/homebrew-openjdk managing version using brew Tap

Thiago
  • 9,554
  • 11
  • 68
  • 97