In 2024, even if you can use just brew..
Copybrew install openjdk@17
Java will be installed here:
Copy/opt/homebrew/opt/openjdk@17/bin/java
for Apple Intel path is /usr/local/... rather than /opt/homebrew/...
For the system Java wrappers to find this JDK, symlink it with:
Copysudo ln -sfn /opt/homebrew/opt/openjdk\@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
resp. for Intel
Copysudo ln -sfn /usr/local/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
Now, running /usr/libexec/java_home -V should show the path to JAVA 17, something like:
Copy17.0.9 (x86_64) "Homebrew" - "OpenJDK 17.0.9" /opt/homebrew/Cellar/openjdk@17/17.0.9/libexec/openjdk.jdk/Contents/Home
(This is what you are missing btw, if javac or javac --version does not give you a command-not-found but an The operation couldn’t be completed. Unable to locate a Java Runtime.)
In case you see the wrong version, check if the path to JAVA_HOME is set correctly. If not, you could set it by:
Copyexport JAVA_HOME=\$(/usr/libexec/java_home)
...give a try to sdkman, it's far better than brew
Copycurl -s "https://get.sdkman.io" | bash
then open a new shell and try list to see what you could install ;-)
Copysdk list java
At time of writing you could use:
Copysdk install java 17.0.4.1-tem
Java will be installed here:
Copy/Users/YOUR_USERNAME_HERE/.sdkman/candidates/java/17.0.4.1-tem
Answer from freedev on Stack OverflowIn 2024, even if you can use just brew..
Copybrew install openjdk@17
Java will be installed here:
Copy/opt/homebrew/opt/openjdk@17/bin/java
for Apple Intel path is /usr/local/... rather than /opt/homebrew/...
For the system Java wrappers to find this JDK, symlink it with:
Copysudo ln -sfn /opt/homebrew/opt/openjdk\@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
resp. for Intel
Copysudo ln -sfn /usr/local/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
Now, running /usr/libexec/java_home -V should show the path to JAVA 17, something like:
Copy17.0.9 (x86_64) "Homebrew" - "OpenJDK 17.0.9" /opt/homebrew/Cellar/openjdk@17/17.0.9/libexec/openjdk.jdk/Contents/Home
(This is what you are missing btw, if javac or javac --version does not give you a command-not-found but an The operation couldn’t be completed. Unable to locate a Java Runtime.)
In case you see the wrong version, check if the path to JAVA_HOME is set correctly. If not, you could set it by:
Copyexport JAVA_HOME=\$(/usr/libexec/java_home)
...give a try to sdkman, it's far better than brew
Copycurl -s "https://get.sdkman.io" | bash
then open a new shell and try list to see what you could install ;-)
Copysdk list java
At time of writing you could use:
Copysdk install java 17.0.4.1-tem
Java will be installed here:
Copy/Users/YOUR_USERNAME_HERE/.sdkman/candidates/java/17.0.4.1-tem
Java doesn't mind if you install multiple versions. This is often required; java is not backwards compatible (it tries to change little, but e.g. the java8 to java9 transition broke a ton of stuff, much of it needless and much of it not reasonably expectable or fixable by libraries and apps, so a bunch of java apps and libraries only run on java8 - just an example).
So, yes, you have installed JDK17. Also, yes, if you just run java without specifying which one you want, you so happen to get java13 here.
To see all installed javas, you can run:
Copy/usr/libexec/java_home -V
to 'override', you can use something like (depends on which shell you're using on your mac):
Copyexport JAVA_HOME=`/usr/libexec/java_home -v 17`
(the backticks mean: Run this then take the output of it and treat that as the 'value' of the expression. here, assign it to the JAVA_HOME env var. -v 17 requests a path to java 17. The -V option lists all and is meant for your eyeballs, not for scripts. The -v option is mostly for scripting, and that's how we're using it here).
JAVA_HOME decides which java is used by some things, but the java you get when you just type java is /usr/bin/java, and that executable is actually just a wrapper that picks a java to run from amongst all installed versions. It uses JAVA_HOME to decide which java to actually run. There are wrappers for all the common commands (javac, too). You can always run e.g. which javac to see what that actually runs; you probably see /usr/bin/javac. Everything in /usr/bin is one of these wrapper thingies that looks at JAVA_HOME and then runs the binary it finds there.
Oracle released native Apple Silicon Java JDK 17
Not sure when Open JDK released it, but it's there too https://jdk.java.net/17/
[ edit ] It was released on August 7th this year.https://openjdk.java.net/jeps/391 [/ edit ]
More on reddit.comFolks with M1 Macbooks and Macs. Oracle's JDK17 now officially supports ARM.
Java 17 for 10.8, 10.9, 10.10, and 10.11 & Java 11 for 10.6-10.11 (JDK) | MacRumors Forums
Launch keeps crashing on MacBook. Possible problem with Java?
Apple computers, especially older ones, are not equipped to effectively run video game software. I’d just give up on that one
More on reddit.comVideos
Just JDK 17 for now but it's a start:
https://www.oracle.com/java/technologies/downloads/#jdk17-mac
Many apps require Java. You might need some tweaking with apps which complain about version 8 or 11 by editing universalJavaApplicationStub in your App content and adding something like:
export JAVA_HOME=$(/usr/libexec/java_home -v11)
Basically you need to trick the app it's using an older version of Java.
Not sure when Open JDK released it, but it's there too https://jdk.java.net/17/
[ edit ] It was released on August 7th this year.https://openjdk.java.net/jeps/391 [/ edit ]
Microsoft also do builds for most OS's & architectures including MacOS ARM - https://docs.microsoft.com/en-au/java/openjdk/download but not 17 as yet.
I tested this answer using a clean install of High Sierra 10.13.6. All updates from Apple were installed.
The downloads of the JDKs can be found at Java Downloads. I could not correctly view this site using Safari under High Sierra. Instead, I installed and used Firefox ESR (Extend Support Release). This link for Firefox download can be successfull viewed from Safari. The file I downloaded and installed was Firefox 115.16.1esr.dmg.
I tried JDK 23 by downloading and installing jdk-23_macos-x64_bin.dmg. This was not recognized by Java. Next, I tried JDK 21 by downloading and installing jdk-21_macos-x64_bin.dmg. This was recognized by Java.
Instructions for uninstalling a JDK can be found here. Personally, I just used the Finder to move the /Library/Java/JavaVirtualMachines/jdk-23.jdk folder to the Trash.
I tested by using the simple code given below. The code was stored in the file named Simple.java.
class Simple{
public static void main(String args[]){
System.out.println("Hello Java");
}
}
Example of testing is given below.
dmas-Mac:Desktop dma$ javac Simple.java
dmas-Mac:Desktop dma$ java Simple
Hello Java
BTW, I tested JDK 23 using macOS Monterey and did not encounter the problems that occurred with High Sierra.
I've successfully installed Java 21 from Microsoft on High Sierra.
$ java --version
openjdk 21.0.8 2025-07-15 LTS
OpenJDK Runtime Environment Microsoft-11933195 (build 21.0.8+9-LTS)
OpenJDK 64-Bit Server VM Microsoft-11933195 (build 21.0.8+9-LTS, mixed mode, sharing)
Java 25 has the some issue as mentioned above. It looks like the jdks have been build with a dependency to "chkstk_darwin" which ist not available in High Sierra.