On Sat, 5 Sep 2026 10:32:38 GMT, Nir Lisker <[email protected]> wrote:
> Adds the [Java > Toolchain](https://docs.gradle.org/current/userguide/toolchains.html#sec:using-java-toolchains) > to replace manual executions: > > | Old | New > |------|------| > | `JAVA` | > [JavaLauncher](https://docs.gradle.org/current/javadoc/org/gradle/jvm/toolchain/JavaLauncher.html) > | > | `JAVAC` | > [JavaCompiler](https://docs.gradle.org/current/javadoc/org/gradle/jvm/toolchain/JavaCompiler.html) > | > | `JAVADOC` | > [JavadocTool](https://docs.gradle.org/current/javadoc/org/gradle/jvm/toolchain/JavadocTool.html) > | > > ## Instructions for reviewers > > The build runs on Windows and Linux (Ubuntu), but the analysis was done on > Windows. > > ### JVM detection and selection > The toolchain selects the JDKs to use based on all those that are made > available to it. As detailed in the link above, JDKs can come from various > sources on the user machine, including being auto-provisioned. The daemon JDK > is always available (usually `JAVA_HOME`), and `gradle.properties` made > `JDK_HOME` available in #2240. > Selection of the toolchain build/worker JDK from all available ones is done > internally (as detailed in the link) based on the restrictions configured in > the toolchain. I have restricted the major version to that of > `jdkVersionInfo` (exact version, not minimum), which is determined by the > *build file's JDK resolution*: > > def envJavaHome = cygpath(System.getenv("JDK_HOME")) > if (envJavaHome == null || envJavaHome.equals("")) envJavaHome = > cygpath(System.getenv("JAVA_HOME")) > def javaHome = envJavaHome == null || envJavaHome.equals("") ? > System.getProperty("java.home") : envJavaHome > > > An additional restriction we can add is by vendor so that only the JDKs that > match `JDK_HOME` can be selected. > > However **the selected toolchain JDK might not be the same as the resolved > build's JDK**. The toolchain always prefers the daemon JVM to avoid forking, > so if it meets the restrictions, it's selected. Consider the following > scenarios (assuming also vendor matches if that helps): > > | Scenario | `JAVA_HOME` | `JDK_HOME` | Selection > | > |-----------|----------------|---------------|------------------------------------------------------| > | 1 | 25 | 26 | `JDK_HOME` - > only it passes the restrictions | > | 2 | 26 | 25 | `JDK_HOME` - > only it passes the restrictions | > | 3 | 25/26 Path A | 25/26 Path B | `JAVA_HOME` - internal > toolchain preference >:(... This pull request has now been integrated. Changeset: ce1cc59b Author: Nir Lisker <[email protected]> URL: https://git.openjdk.org/jfx/commit/ce1cc59b6d74c667f299054c20abdafbcf28c0ed Stats: 21 lines in 2 files changed: 15 ins; 3 del; 3 mod 8391822: Use Gradle's Java Toolchain Reviewed-by: mhanl, kcr ------------- PR: https://git.openjdk.org/jfx/pull/2294
