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

Reply via email to