On Sat, 5 Sep 2026 12:28:05 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 it passes the 
>> restrictions       |
>> | 26                  | 25                 | `JDK_HOME` - only it 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 ...
>
> Nir Lisker has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Add toolchain also for root

> Native tasks such as Decora and Prism still use executable = JAVA, which will 
> be resolved from the JDK_HOME path. As discussed above, the toolchain might 
> be using a different JDK (of the same major version).

I'm not sure if I understand correctly. Why are we doing that only for those 
tasks still in this PR?

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

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

Reply via email to