From 47fdf06101c5c78da29329c74a4e0795d6fb4bea Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Fri, 4 Apr 2025 10:44:35 +0200 Subject: [PATCH] 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. --- .../tools/build-managers/gradle/default.nix | 15 +++++++-------- .../gradle/tests/toolchains/build.gradle | 11 +++++++++++ .../tests/toolchains/src/main/java/Main.java | 5 +++++ pkgs/top-level/all-packages.nix | 1 - 4 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 pkgs/development/tools/build-managers/gradle/tests/toolchains/build.gradle create mode 100644 pkgs/development/tools/build-managers/gradle/tests/toolchains/src/main/java/Main.java diff --git a/pkgs/development/tools/build-managers/gradle/default.nix b/pkgs/development/tools/build-managers/gradle/default.nix index b557d85eff15..e6fbdaec0767 100644 --- a/pkgs/development/tools/build-managers/gradle/default.nix +++ b/pkgs/development/tools/build-managers/gradle/default.nix @@ -1,5 +1,4 @@ { - jdk11, jdk17, jdk21, jdk23, @@ -288,27 +287,27 @@ rec { unwrapped = gradle; tests = { toolchains = + let + javaVersion = lib.substring 0 2 (lib.getVersion jdk23); + in runCommand "detects-toolchains-from-nix-env" { # Use JDKs that are not the default for any of the gradle versions nativeBuildInputs = [ (gradle.override { javaToolchains = [ - jdk11 jdk23 ]; }) ]; - src = ./tests/java-application; + src = ./tests/toolchains; } '' cp -a $src/* . + substituteInPlace ./build.gradle --replace-fail '@JAVA_VERSION@' '${javaVersion}' env GRADLE_USER_HOME=$TMPDIR/gradle org.gradle.native.dir=$TMPDIR/native \ - gradle javaToolchains --no-daemon --quiet --console plain > $out - cat $out | grep "Language Version: 11" - cat $out | grep "Detected by: environment variable 'JAVA_TOOLCHAIN_NIX_0'" - cat $out | grep "Language Version: 23" - cat $out | grep "Detected by: environment variable 'JAVA_TOOLCHAIN_NIX_1'" + gradle run --no-daemon --quiet --console plain > $out + grep -q "JAVA_VERSION: ${javaVersion}" $out || exit 1 ''; } // gradle.tests; } diff --git a/pkgs/development/tools/build-managers/gradle/tests/toolchains/build.gradle b/pkgs/development/tools/build-managers/gradle/tests/toolchains/build.gradle new file mode 100644 index 000000000000..6ebe69eafac8 --- /dev/null +++ b/pkgs/development/tools/build-managers/gradle/tests/toolchains/build.gradle @@ -0,0 +1,11 @@ +plugins { + id('application') +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(@JAVA_VERSION@)) +} + +application { + mainClass = 'Main' +} diff --git a/pkgs/development/tools/build-managers/gradle/tests/toolchains/src/main/java/Main.java b/pkgs/development/tools/build-managers/gradle/tests/toolchains/src/main/java/Main.java new file mode 100644 index 000000000000..02a213d9fd1b --- /dev/null +++ b/pkgs/development/tools/build-managers/gradle/tests/toolchains/src/main/java/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args) { + System.out.println("JAVA_VERSION: " + System.getProperty("java.version")); + } +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5e79fba3425e..e849f4a0da58 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8317,7 +8317,6 @@ with pkgs; gnumake = callPackage ../development/tools/build-managers/gnumake { }; gradle-packages = import ../development/tools/build-managers/gradle { inherit - jdk11 jdk17 jdk21 jdk23