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 { 2 - jdk11, 3 jdk17, 4 jdk21, 5 jdk23, ··· 288 unwrapped = gradle; 289 tests = { 290 toolchains = 291 runCommand "detects-toolchains-from-nix-env" 292 { 293 # Use JDKs that are not the default for any of the gradle versions 294 nativeBuildInputs = [ 295 (gradle.override { 296 javaToolchains = [ 297 - jdk11 298 jdk23 299 ]; 300 }) 301 ]; 302 - src = ./tests/java-application; 303 } 304 '' 305 cp -a $src/* . 306 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'" 312 ''; 313 } // gradle.tests; 314 }
··· 1 { 2 jdk17, 3 jdk21, 4 jdk23, ··· 287 unwrapped = gradle; 288 tests = { 289 toolchains = 290 + let 291 + javaVersion = lib.substring 0 2 (lib.getVersion jdk23); 292 + in 293 runCommand "detects-toolchains-from-nix-env" 294 { 295 # Use JDKs that are not the default for any of the gradle versions 296 nativeBuildInputs = [ 297 (gradle.override { 298 javaToolchains = [ 299 jdk23 300 ]; 301 }) 302 ]; 303 + src = ./tests/toolchains; 304 } 305 '' 306 cp -a $src/* . 307 + substituteInPlace ./build.gradle --replace-fail '@JAVA_VERSION@' '${javaVersion}' 308 env GRADLE_USER_HOME=$TMPDIR/gradle org.gradle.native.dir=$TMPDIR/native \ 309 + gradle run --no-daemon --quiet --console plain > $out 310 + grep -q "JAVA_VERSION: ${javaVersion}" $out || exit 1 311 ''; 312 } // gradle.tests; 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 gnumake = callPackage ../development/tools/build-managers/gnumake { }; 8318 gradle-packages = import ../development/tools/build-managers/gradle { 8319 inherit 8320 - jdk11 8321 jdk17 8322 jdk21 8323 jdk23
··· 8317 gnumake = callPackage ../development/tools/build-managers/gnumake { }; 8318 gradle-packages = import ../development/tools/build-managers/gradle { 8319 inherit 8320 jdk17 8321 jdk21 8322 jdk23