Wrong JAVA_HOME after upgrade to macOS Big Sur v11.0.1

36,876

Solution 1

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

Solution 2

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:)

Solution 3

As I tryed. I just delete the /Library/Internet Plug-Ins/JavaAppletPlugin.plugin and relogin. Then everything works fine.

Solution 4

For me https://developer.apple.com/forums/thread/666681 worked after spending so much time on the solutions.

I simply call following commands

sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin

sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefpane

Solution 5

Had this problem after installing Big Sur.

First I started uninstalling all JDK from the system with:

sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin  
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane  
sudo rm -rf /Library/Application\ Support/Oracle/Java/ 
sudo rm -rf /Library/Java/JavaVirtualMachines 

Then, I installed the JDK that I am going to use:

brew tap AdoptOpenJDK/openjdk
brew install --cask adoptopenjdk<version>
Share:
36,876
Konstantin
Author by

Konstantin

Updated on July 09, 2022

Comments

  • Konstantin
    Konstantin almost 2 years

    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
    
  • CryptoFool
    CryptoFool over 3 years
    Seems like a bug to me. I can think of no justification for either its apparent new behavior or for deciding to change it out from under everyone already using its prior behavior. - Maybe someone should Radar this issue.
  • Konstantin
    Konstantin over 3 years
    That's one of JVMs on your mac, selected by default - I have the same too. Check what JVMs available calling /usr/libexec/java_home -V, and then get JAVA_HOME for the one you need calling /usr/libexec/java_home -v <ver>.
  • fobbymaster
    fobbymaster almost 3 years
    Following these steps blew away my existing terminal settings. I don't quite remember where they were set, but they are now gone.
  • rahulxyz
    rahulxyz almost 3 years
    Worked for me. I also had run "unset JAVA_HOME ;" before this.
  • Jeremy Huddleston Sequoia
    Jeremy Huddleston Sequoia almost 3 years
    Note that this change in behavior in v11.0 was not intentional. It was fixed in v11.2 to return to be consistent with the older behavior for JAVA_HOME.
  • Andracchi
    Andracchi over 2 years
    Thank you very much!!
  • Nickr
    Nickr over 2 years
    Thank you, the instruction was clear and worked perfectly. I encountered issues with building android apps in Ionic when my office macbook updated to Big Sur. Even though my device has a lot of restrictions, no special permissions needed to apply this fix. Thank you again.
  • yozhik
    yozhik over 2 years
    The same is working with JDK 11 as well. Just tested it.
  • Abhay Nagaraj
    Abhay Nagaraj about 2 years
    This worked for me although the route that led me to this problem of a wrongly set/unavailable JAVA_HOME environment variable. "java -version" command upon execution, gave me all the rightly seeming answers. But upon trying to access the path, it wasn't something that was present indeed. Therefore, I tried unsetting the JAVA_HOME variable using the above command and removed all the other two variable values except for v jdk 11 That resolved the long running issue I had run into, after upgrading to MacOS BigSur. Hope it helps someone else stuck in a similar rabbit hole.