gradle: Improve toolchains test

Previously the test relied on the output of the javaToolchains task and
therefore on the way that toolchains are passed to Gradle. This was
brittle in case we want to change the way of how we supply toolchains to
Gradle (see e.g. #366929).

After this change, instead of inspecting the output of javaToolchains,
the toolchains test now tries to assemble a project using a toolchain
that was passed via the gradle.override.

+23 -9
+7 -8
pkgs/development/tools/build-managers/gradle/default.nix
··· 1 1 { 2 - jdk11, 3 2 jdk17, 4 3 jdk21, 5 4 jdk23, ··· 288 287 unwrapped = gradle; 289 288 tests = { 290 289 toolchains = 290 + let 291 + javaVersion = lib.substring 0 2 (lib.getVersion jdk23); 292 + in 291 293 runCommand "detects-toolchains-from-nix-env" 292 294 { 293 295 # Use JDKs that are not the default for any of the gradle versions 294 296 nativeBuildInputs = [ 295 297 (gradle.override { 296 298 javaToolchains = [ 297 - jdk11 298 299 jdk23 299 300 ]; 300 301 }) 301 302 ]; 302 - src = ./tests/java-application; 303 + src = ./tests/toolchains; 303 304 } 304 305 '' 305 306 cp -a $src/* . 307 + substituteInPlace ./build.gradle --replace-fail '@JAVA_VERSION@' '${javaVersion}' 306 308 env GRADLE_USER_HOME=$TMPDIR/gradle org.gradle.native.dir=$TMPDIR/native \ 307 - gradle javaToolchains --no-daemon --quiet --console plain > $out 308 - cat $out | grep "Language Version: 11" 309 - cat $out | grep "Detected by: environment variable 'JAVA_TOOLCHAIN_NIX_0'" 310 - cat $out | grep "Language Version: 23" 311 - cat $out | grep "Detected by: environment variable 'JAVA_TOOLCHAIN_NIX_1'" 309 + gradle run --no-daemon --quiet --console plain > $out 310 + grep -q "JAVA_VERSION: ${javaVersion}" $out || exit 1 312 311 ''; 313 312 } // gradle.tests; 314 313 }
+11
pkgs/development/tools/build-managers/gradle/tests/toolchains/build.gradle
··· 1 + plugins { 2 + id('application') 3 + } 4 + 5 + java { 6 + toolchain.languageVersion.set(JavaLanguageVersion.of(@JAVA_VERSION@)) 7 + } 8 + 9 + application { 10 + mainClass = 'Main' 11 + }
+5
pkgs/development/tools/build-managers/gradle/tests/toolchains/src/main/java/Main.java
··· 1 + public class Main { 2 + public static void main(String[] args) { 3 + System.out.println("JAVA_VERSION: " + System.getProperty("java.version")); 4 + } 5 + }
-1
pkgs/top-level/all-packages.nix
··· 8317 8317 gnumake = callPackage ../development/tools/build-managers/gnumake { }; 8318 8318 gradle-packages = import ../development/tools/build-managers/gradle { 8319 8319 inherit 8320 - jdk11 8321 8320 jdk17 8322 8321 jdk21 8323 8322 jdk23