18

This is weird, I have set JAVA_HOME for my mac which can be found when I am using bash shell, but if I change shell, I get a message saying JAVA_HOME not set. What could be going on here?

4 Answers 4

40

I stumbled upon your question when trying to solve the same issue while migrating from bash to oh-my-zsh. The reason it's not there is that there is no code setting it for zsh but there was for bash. Generally theres something exporting JAVA_HOME whenever a new bash window is opened so it's always set for you. There is a good thread where this might be happening on the Unix & Linux StackExchange site.

To do the same thing in zsh, you can edit the .zshrc which is run every time zsh starts. I found a sample .zshrc which got me most of the way. The key line being:

export JAVA_HOME=`/usr/libexec/java_home` 

Here is the file which I appended to the end of my existing ~/.zshrc file:

#zshrc, interactive shell settings export ZSH=$HOME/.zsh # emacs integration [[ $EMACS = t ]] && unsetopt zle # env if [[ -e /usr/libexec/java_home ]]; then export JAVA_HOME=`/usr/libexec/java_home` fi if [[ -e /usr/local/lib/node_modules ]]; then export NODE_PATH=/usr/local/lib/node_modules fi # path export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin export PATH=/opt/usr/sbin:/opt/sbin:/opt/usr/bin:/opt/bin:$PATH export PATH=/usr/local/bin:/usr/local/sbin:$PATH export PATH=$HOME/.cabal/bin:$PATH export PATH=$HOME/.gem/ruby/1.8/bin:$PATH export PATH=$JAVA_HOME/bin:$PATH export PATH=$HOME/.bin:$PATH setopt null_glob # source all files in zsh root for include in $ZSH/*.zsh; do source $include done # source all non-controlled files for include in $ZSH/private/*.zsh; do source $include done unsetopt null_glob 

Then source ~/.zshrc to run in the current shell (or just start a new one) and you should be able to see that it is set with export | grep JAVA_HOME.

I also ended up running mkdir ~/.zsh to create the directory this is looking for and removing the .cabal and .gem lines as they were not needed for me.

Sign up to request clarification or add additional context in comments.

Comments

9

I have just installed Mac OS Catalina Version 10.15 and found that environment variables such as JAVA_HOME and others that have been set in my .bash_profile :

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATH export ANDROID_HOME=/Users/mynziak/Library/Android/sdk export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools export M2_HOME=/usr/local/Cellar/maven/3.6.2/libexec export M2=${M2_HOME}/bin export PATH=${PATH}:${M2_HOME}/bin 

are not set in fact!

I saw % in terminal instead of general $ that means you are using a zsh shell instead of bash shell. With Catalina zsh is now the default shell and bash will be completely gone in the future.

oh-my-zsh shell: https://ohmyz.sh/

So you have to setup all environment variables in .zshrc file.

I just copy-pasted every variables from .bash_profile in to .zshrc and re-opened terminal.

Files .bash_profile and .zshrc are hidden (cmd+shift+. - show hidden files in finder) but can be found in path:

/Users/mynziak/.zshrc

but use own username!

enter image description here

1 Comment

for people who don't have this file, just create it touch ~/.zshrc
6

When you set JAVA_HOME in a shell, then it is active and available only for that context, and it will be gone when you close that shell.

Instead either change global environment (or) your .bashrc to include it. So that every time you start a shell, the variable will be available.

edit the .profile or .bash_profile to include the JAVA_HOME.

export JAVA_HOME=`/usr/lib....` 

and also below command will return the path for java home directory.

/usr/libexec/java_home -v 1.7 

where 1.7 is the version you want.

Comments

2

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

export PATH=$JAVA_HOME/bin:$PATH

Add above 2 lines in ~/.bashrc or ~/.zshrc and reload the file using source command.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.