Found that you need to register the java-17 dist in jenv using command:
Copyjenv add /usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
The path to /usr/local/opt/openjdk@17/libexec/openjdk.jdk you may take from your brew installation logs (found on the line sudo ln -sfn /usr/local/opt/openjdk@17/libexec/openjdk.jdk ...) and just add /Contents/Home
Now, it works
Copy> jenv local 17.0
> java -version
openjdk version "17.0.1" 2021-10-19
OpenJDK Runtime Environment Homebrew (build 17.0.1+1)
OpenJDK 64-Bit Server VM Homebrew (build 17.0.1+1, mixed mode, sharing)
Answer from lazylead on Stack OverflowmacOS - How to install Java 17 - Stack Overflow
HOW DO YOU DOWNLOAD AND USE JAVA 17?
MacOS - jenv local, without a ".java-version" file ?
Modern Java Practices
Java 15 is the current LTS ("long-term support") version
No it is not. Java 15 is only updated/patched until next release, which means for 6 months. LTS is something a company chooses to support for a long period of time. Oracle supports Java 8, Java 11, Java 17 (next LTS). Same for Redhat. I think Azure support Java 14 as LTS as well.
In general, you will find that AdoptOpenJDK is a go-to choice for obtaining the JDK.
You should go to official OpenJDK site to get your JDK.
Lombok
Section on Lombok. I would add a big warning or note. If you're promoting newest Java versions, I guess you know, that records have landed and in Java 16 they will be a standard feature. Combine it with upcoming withers and you can write:
record Point(int x, int y) {}
Point p;
Point pp = p with { x = 3; }Lombok has a lot of problems, funnily enough, it broke IntelliJ recently and they had to do an emergency patching.
P.s. I can make a pull request for these suggested changes.
More on reddit.comVideos
In 2024, even if you can use just brew..
brew install openjdk@17
Java will be installed here:
/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:
sudo ln -sfn /opt/homebrew/opt/openjdk\@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
resp. for Intel
sudo 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:
17.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:
export JAVA_HOME=\$(/usr/libexec/java_home)
...give a try to sdkman, it's far better than brew
curl -s "https://get.sdkman.io" | bash
then open a new shell and try list to see what you could install ;-)
sdk list java
At time of writing you could use:
sdk install java 17.0.4.1-tem
Java will be installed here:
/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:
/usr/libexec/java_home -V
to 'override', you can use something like (depends on which shell you're using on your mac):
export 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.