Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Wrong JAVA_HOME after upgrade to macOS Big Sur v11.0.1

In my setup on macOS I'm working with several JDKs, switching between them via /usr/libexec/java_home tool, similar to a method described in this SO answer

After upgrading to macOS Big Sur v11.0.1, my JAVA_HOME setting stopped working, always reporting the same java version:

% /usr/libexec/java_home -V Matching Java Virtual Machines (5):     11.0.8 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 11" /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home     1.8.162.12 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home     1.8.0_162 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home     1.8.0_45 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home     1.7.0_45 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home  % /usr/libexec/java_home -v 1.8.162.12 /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home  % /usr/libexec/java_home -v 1.7.0_45 /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home 
like image 397
Konstantin Avatar asked Nov 19 '20 18:11

Konstantin


2 Answers

Seems in macOS Big Sur v11.0.1 the behavior of the /usr/libexec/java_home -v ... command has changed: it is sensitive to the previously set value of JAVA_HOME environment variable.

Exact behavior is not clear, I couldn't find any documentation on this, but in my experiments it reported the version already set in JAVA_HOME, regardless of the -v switch:

% JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home /usr/libexec/java_home -v 1.8.0_162 /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home 

Additionally, I noticed that it reports nothing, if JAVA_HOME is set, but doesn't point to a valid java home (also for -V):

% JAVA_HOME=dummy /usr/libexec/java_home -v 1.7.0_45 % JAVA_HOME=dummy /usr/libexec/java_home -V % 

Solution is to ensure JAVA_HOME is not set before executing /usr/libexec/java_home:

% unset JAVA_HOME ; /usr/libexec/java_home -v 1.8.0_162 /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home 
like image 135
Konstantin Avatar answered Sep 18 '22 14:09

Konstantin


I have Big Sur 11.2.1 from 18.02.2021. I had the same issue with JAVA_HOME path configuration. After reading a lot of information I solved my problem with next:

Install JDK 8: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html Java SE Development Kit 8u281

Install it as usual on your MacOS Big Sur.

Check JDK version:

java -version java version "1.8.0_281" Java(TM) SE Runtime Environment (build 1.8.0_281-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode) 

Check what versions of JDK are already installed on your machine:

/usr/libexec/java_home -V  Matching Java Virtual Machines (2):     1.8.281.09 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home     1.8.0_281 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 

Get only one that you need:

/usr/libexec/java_home -v 1.8.0_281 /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home 

On Catalina and Big Sur - there is Z-shell , to add Environment variables like JAVA_HOME there are two files for that: ~/.zshenv and ~/.zshrc, I couldn't make it work with first one. It worked for me like this:

nano ~/.zshrc 

Add to that file this line:

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

Press Ctrl+X and save changes.

Then run command to apply that changes to current terminal:

source ~/.zshrc 

After that you can check if everything is working with command:

echo $JAVA_HOME it will print you: /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home 

Restart your terminal and programs which will be using JAVA_HOME variable. For me it was Android Studio. Now everything works fine. I am new to Mac OS and it took me with 4hours to solve this. With Windows it's just done in a minute:)

like image 39
yozhik Avatar answered Sep 20 '22 14:09

yozhik