gradle/foojay-toolchains

Requesting a Java 22 toolchain fails with a strange error

wolfs opened this issue · 4 comments

wolfs commented

With the foojay convention plugin 0.7.0 and a simple Java lib requesting a 22 Java toolchain, the build fails with a strange error:

Failed to calculate the value of task ':lib:compileJava' property 'javaCompiler'.
> Unable to download toolchain matching the requirements ({languageVersion=22, vendor=any, implementation=vendor-specific}) from 'https://api.foojay.io/disco/v3.0/ids/f668dfc827666d293721a787022fb25b/redirect'.
  > Can't determine filename for resource located at: https://api.foojay.io/disco/v3.0/ids/f668dfc827666d293721a787022fb25b/redirect

The downloaded JDK is actually mandrel-java17-22.3.4.0-Final, that doesn't seem like a Java 22 at all. When requesting Java version 23, the build fails with a good error message:

Failed to calculate the value of task ':lib:compileJava' property 'javaCompiler'.
> Requesting vendor list failed: {"result":[],"message":"Requested version is not released yet."}

This may be a problem in the disco API.

The root cause here is that there is a mandrel distribution that has a version 22 that is jdk_version 17. Perhaps we should only use an allowlist of distributions, instead of all values returned from the foojay API? It could be configurable in an extension if someone needs to change it.

Or, the API match code here could be updated to use jdk_version all the time, since that works for everything and not just GraalVM.

StefMa commented

If I open the URL (https://api.foojay.io/disco/v3.0/ids/f668dfc827666d293721a787022fb25b/redirect) on my machine (macOS arm64), it downloads liberica-vm-openjdk11. Looking into the content, it says something like graalvm_f6c97b4e45_java11 22.3.4.

I'm not 100% aware of the diferences between "normal" jdks and graalvm.
But it seems that the plugin requests wrongly a GraalVM distribution because there are 22 versions available (for graal? 🤔 ) but not for "normal" jdks?
Isn't Graal somewhat "special" and therefore should be exlcuded in case there is no vendor specified? 🤔

In this case, I guess, when requesting a 22 Java toolchain, the error would be the same as for version 23.
Because - if i see it correctly - there is no version 22 for "normal jdks" available yet.

Is this fixed with #55 ? 🤔
Can this be closed @jbartok ?

Is this fixed with #55 ? 🤔 Can this be closed @jbartok ?

Yes, thanks for pointing it out!