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

One thing I noticed, but this might be expected?
The following command does not work anymore:


bash gradlew --stop
env -u JDK_HOME JAVA_HOME=.../java25 bash gradlew \
    -PJDK_HOME=.../java26 \
    -Porg.gradle.java.installations.auto-detect=false \
    :base:compileJava -i --rerun


Error:

Cannot find a Java installation on your machine (Linux 7.2.7-1-cachyos amd64) 
matching:
{languageVersion=26, vendor=any vendor, implementation=vendor-specific, 
nativeImageCapable=false}.
Toolchain download repositories have not been configured.


So when I have JDK25 in my PATH but want to override it with `-PJDK_HOME` to 
JDK26, it does not seem to work or I'm doing it wrong?

build.gradle line 4415:

> 4413:         compile.options.debugOptions.debugLevel = IS_DEBUG_JAVA ? 
> "source,lines,vars" : "source,lines"
> 4414: 
> 4415:         // forces forking of the damon and build JVMs (even when it's 
> the same JDK), no-op if the JVMs are different

Suggestion:

        // forces forking of the daemon and build JVMs (even when it's the same 
JDK), no-op if the JVMs are different

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

PR Review: https://git.openjdk.org/jfx/pull/2294#pullrequestreview-5326788763
PR Review Comment: https://git.openjdk.org/jfx/pull/2294#discussion_r4112207898

Reply via email to