ChatGPT解决这个技术问题 Extra ChatGPT

How to set JAVA_HOME environment variable on Mac OS X 10.9?

I just purchased a brand new MacBook Pro.

This is my first MAC ever and I'm still trying to get the hang of navigating my way around.

Anyway, I'm also new to Java and I've been practicing on my Windows PC before it permanently died.

Now that I'm on this MAC, I installed my JDK and now I need to set the JAVA_HOME environment variable.

I have no idea what to do.

I tried following some of these guides and didn't get very far.

Mkyong.com : How to set JAVA_HOME variable in Mac OSX YouTube : How to set environment variables on mac, linux, solaris, rhel YouTube : How to Set Environment Variables in Mac

I was able to locate the terminal and I think I created some multiple files. I'm getting messages like this:

(1) Another program may be editing the same file. If this is the case, be careful not to end up with two different instances of the same file when making changes. Quit, or continue with caution.

(2) An edit session for this file crashed. If this is the case, use ":recover" or "vim -r /Users/Erwin/.bash_profile" to recover the changes (see ":help recovery"). If you did this already, delete the swap file "/Users/Erwin/.bash_profile.sw p" to avoid this message.

Can somebody tell how to set Java in Mac OSX environment step by step?

After installing via brew on an M1 Mac, mine was located /opt/homebrew/Cellar/openjdk/17.0.1_1/libexec/openjdk.jdk/Contents/Home. Obviously change for your version but the typical methods of finding the path proved difficult so I hope this helps others.

A
Adrian Petrescu

If you're using bash, all you have to do is:

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile

If you're using zsh (which probably means you're running macOS Catalina or newer), then it should instead be:

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.zshrc

In either case, restart your shell.

If you have multiple JDK versions installed and you want it to be a specific one, you can use the -v flag to java_home like so:

echo export "JAVA_HOME=\$(/usr/libexec/java_home -v 1.7)" >> ~/.bash_profile

When you say "shell," do you mean I close the terminal window and reopen it? Also, does this permanently add the environment variable for my jdk?
I think instead of restarting the terminal if you do source ~/.bash_profile it would work, right?
@ShobhitPuri Yup, it would, I just wanted to keep it simple for the asker.
echo export "JAVA_HOME=\$(/usr/libexec/java_home -v 1.7)" >> ~/.bash_profile If you need a specific version. 1.7 in this case.
on OSX 11. Instead of bash profile, we're now using .zshrc. So the command will be echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.zshrc
K
Koray Tugay

I just spent 2 hours setting this variable. The other answers did not work properly for me. I'm using macOS Catalina 10.15.4.

First, find your actual Java SDK Home directory:

/usr/libexec/java_home

Manually navigate there to make sure you don't have any mistakes due to incorrect versions, etc. For me, this was:

/Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home

Next, edit your terminal's profile. If you're using zsh, this will be:

vim ~/.zshrc

If you're not using zsh, this will be:

vim ~/.bash_profile

Inside, add the following new line anywhere in the file:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home

Restart your terminal app (or source ~/.bash_profile), and it should work properly.


Thank you. This worked for me on MacOS BigSur
I had the same experience, and this got it solved for me. Thanks!
This worked even on macOS Monterey. Thanks for this one! Appreciate it!
J
JohnL4

I did it by putting

export JAVA_HOME=`/usr/libexec/java_home`

(backtics) in my .bashrc. See my comment on Adrian's answer.


L
Levi Arista

In Mac OSX 10.5 or later, Apple recommends to set the $JAVA_HOME variable to /usr/libexec/java_home, just export $JAVA_HOME in file ~/. bash_profile or ~/.profile.

Open the terminal and run the below command.

$ vim .bash_profile

export JAVA_HOME=$(/usr/libexec/java_home)

save and exit from vim editor, then run the source command on .bash_profile

$ source .bash_profile

$ echo $JAVA_HOME

/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

C
Community

Set $JAVA_HOME environment variable on latest or older Mac OSX.

Download & Install install JDK

First, install JDK Open terminal check java version

$ java -version

Set JAVA_HOME environment variable

Open .zprofile file

$ open -t .zprofile

Or create . zprofile file

$ open -t .zprofile

write in .zprofile

export JAVA_HOME=$(/usr/libexec/java_home)

Save .zprofile and close the bash file & then write in the terminal for work perfectly.

$ source .zprofile

Setup test in terminal

$ echo $JAVA_HOME  
/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home

Also I had a question what "/usr/libexec/java_home" actually is. Answer: medium.com/zendesk-engineering/…
/usr/libexec/java_home is the simplest maintainable way of setting JAVA_HOME on macOS. You can use java_home to: Find all installed JDKs.
this works for me on a 2019 Mac running Catalina in 2020. Accepted and most upvoted answer didn't. First thing is that the bash profile is now .zprofile, also the export command content in accepted answer didn't work for me but this did.
Just a note about where to get the JDK from–alternatively, you can install JDK from adoptopenjdk.net. The difference is that Oracle's licence does not allow commercial builds using its JDK unless you pay for the licence. Whereas adoptopenjdk is open source.
J
Jerry Chong

It is recommended to check default terminal shell before set JAVA_HOME environment variable, via following commands:

$ echo $SHELL
/bin/bash

If your default terminal is /bin/bash (Bash), then you should use @Adrian Petrescu method.

If your default terminal is /bin/zsh (Z Shell), then you should set these environment variable in ~/.zshenv file with following contents:

export JAVA_HOME="$(/usr/libexec/java_home)"

Similarly, any other terminal type not mentioned above, you should set environment variable in its respective terminal env file.


N
Niket Shah

If you are using Zsh, then try to add this line in ~/.zshrc file & restart terminal.

export JAVA_HOME=$(/usr/libexec/java_home) 

S
Senthil Acs

I got it working by adding to ~/.profile. Somehow after updating to El Capitan beta, it didnt work even though JAVA_HOME was defined in .bash_profile.

If there are any El Capitan beta users, try adding to .profile


What's the difference between .profile and .bash_profile?
The idea is that .profile runs for all shells (sh, zsh, whatever); .bash_profile, only for bash shells.
J
John Marcus

Since I'm using openjdk managed with sdkman, I added

sudo ln -sfn /path/to/my/installed/jdk/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

Adding this to your system lets java_home recognize your installed version of Java even when its not installed via standard packages


What do you set JAVA_HOME to in this case, please? export JAVA_HOME="/usr/libexec/java_home" ?
With that line java will be discovered similarly to if it were a standard installation, we're linking the standard install location to point to the actual install location, so its treated like an officially installed package and you don't need to set JAVA_HOME
p
ptn77

I checked my /Library/Java/JavaVirtualMachines/ directory and found the version to be jdk1.8.0_321.jdk/Contents/Home and added this directly to my .bash_profile:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk/Contents/Home

but it's still complaining after sourcing the .bash_profile:The operation couldn’t be completed. Unable to locate a Java Runtime that supports apt.


sorry, I was using the sudo apt install for linux and had to change it to brew. That was my problem
Even though a different user upvoted this I do not see how this answers the question at the top of this page, but it should. Please edit according to How to Answer or delete the answer. Otherwise it risks being flagged as "not an answer" and being deleted.
S
Sunil

In the latest Mac, you have to add the Set $JAVA_HOME environment variable in .zprofile. Here, we simple way to open it. Press ⌘ + Shift + . from keyboard. Just open it and add the $JAVA_HOME environment variable as explained here: