From 47fdf06101c5c78da29329c74a4e0795d6fb4bea Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Fri, 4 Apr 2025 10:44:35 +0200 Subject: [PATCH 1/4] 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 From 2e5d3a13b1273933d4a5ffa02ea78b1cfc04a628 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Fri, 25 Apr 2025 19:29:06 +0000 Subject: [PATCH 2/4] Fix indent Co-authored-by: Olli Helenius --- pkgs/development/tools/build-managers/gradle/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/tools/build-managers/gradle/default.nix b/pkgs/development/tools/build-managers/gradle/default.nix index e6fbdaec0767..1fc85c05e0eb 100644 --- a/pkgs/development/tools/build-managers/gradle/default.nix +++ b/pkgs/development/tools/build-managers/gradle/default.nix @@ -306,7 +306,7 @@ rec { cp -a $src/* . substituteInPlace ./build.gradle --replace-fail '@JAVA_VERSION@' '${javaVersion}' env GRADLE_USER_HOME=$TMPDIR/gradle org.gradle.native.dir=$TMPDIR/native \ - gradle run --no-daemon --quiet --console plain > $out + gradle run --no-daemon --quiet --console plain > $out grep -q "JAVA_VERSION: ${javaVersion}" $out || exit 1 ''; } // gradle.tests; From 6901ff202614d42ede333c29b0f0a913f0756caf Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Fri, 25 Apr 2025 19:29:43 +0000 Subject: [PATCH 3/4] Improve matching the Java version Co-authored-by: Olli Helenius --- pkgs/development/tools/build-managers/gradle/default.nix | 2 +- .../gradle/tests/toolchains/src/main/java/Main.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/build-managers/gradle/default.nix b/pkgs/development/tools/build-managers/gradle/default.nix index 1fc85c05e0eb..2540f210d423 100644 --- a/pkgs/development/tools/build-managers/gradle/default.nix +++ b/pkgs/development/tools/build-managers/gradle/default.nix @@ -307,7 +307,7 @@ rec { substituteInPlace ./build.gradle --replace-fail '@JAVA_VERSION@' '${javaVersion}' env GRADLE_USER_HOME=$TMPDIR/gradle org.gradle.native.dir=$TMPDIR/native \ gradle run --no-daemon --quiet --console plain > $out - grep -q "JAVA_VERSION: ${javaVersion}" $out || exit 1 + test "$(<$out)" = "${javaVersion}" ''; } // gradle.tests; } 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 index 02a213d9fd1b..3ddc68e6ba3f 100644 --- 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 @@ -1,5 +1,5 @@ public class Main { public static void main(String[] args) { - System.out.println("JAVA_VERSION: " + System.getProperty("java.version")); + System.out.println(System.getProperty("java.version")); } } From 2d72e0e3ee5ef4b7b978e353cc59b45eabf7b12a Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Fri, 25 Apr 2025 19:30:06 +0000 Subject: [PATCH 4/4] Tweak getting Java major version Co-authored-by: Olli Helenius --- pkgs/development/tools/build-managers/gradle/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/tools/build-managers/gradle/default.nix b/pkgs/development/tools/build-managers/gradle/default.nix index 2540f210d423..d8a277b57e23 100644 --- a/pkgs/development/tools/build-managers/gradle/default.nix +++ b/pkgs/development/tools/build-managers/gradle/default.nix @@ -288,7 +288,7 @@ rec { tests = { toolchains = let - javaVersion = lib.substring 0 2 (lib.getVersion jdk23); + javaVersion = lib.versions.major (lib.getVersion jdk23); in runCommand "detects-toolchains-from-nix-env" {