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
> 
> 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:
> 
> | `JAVA_HOME` | `JDK_HOME` | Selection                                        
>                       |
> |----------------|---------------|------------------------------------------------------|
> | 25                  | 26                 | `JDK_HOME` - only is passes the 
> restrictions       |
> | 26                  | 25                 | `JDK_HOME` - only is passes the 
> restrictions       |
> | 25/26 Path A | 25/26 Path B | `JAVA_HOME` - internal toolchain preference 
> >:( |
> | 25/26 Path A | 25/26 Path A | `JAVA_HOME`==`JDK_HOME`                       
>         |
> 
> For local testing:
> 1. Stop the daemon with `gradlew --stop`.
> 2. Show the detected toolchains and detection configuration with `gradlew 
> ja...

@kevinrushforth @arapte Please review.

-------------

PR Comment: https://git.openjdk.org/jfx/pull/2294#issuecomment-5551222703

Reply via email to