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
