Summary
The download_jdk gclient var declared at DEPS:97 is vestigial — no DEPS entry references it as a condition, so setting it has no effect on what gets synced. Multiple builder configs in engine/src/flutter/ci/builders/*.json set "download_jdk": false expecting to skip the OpenJDK download, but it's a no-op.
Steps to reproduce
# In a fresh gclient checkout of flutter
cat > .gclient <<'EOF'
solutions = [{
"managed": False,
"name": ".",
"url": "https://github.com/flutter/flutter.git",
"deps_file": "DEPS",
"custom_vars": {"download_jdk": False},
}]
EOF
gclient sync --no-history --shallow -j8
# OpenJDK is downloaded anyway:
ls engine/src/flutter/third_party/java/openjdk/bin/java
# → file exists on linux-x64 / mac / win regardless of download_jdk
Why
DEPS:97 declares it with comment "Checkout Java dependencies only on platforms that do not have java installed on path":
But the engine/src/flutter/third_party/java/openjdk dep block (the only OpenJDK CIPD entry) gates only on host_os/host_cpu:
'engine/src/flutter/third_party/java/openjdk': {
'packages': [...],
'condition': 'not (host_os == "linux" and host_cpu == "arm64")',
# Always download the JDK since java is required for running the formatter.
'dep_type': 'cipd',
},
grep download_jdk DEPS returns only the declaration on line 97 — nothing else in the file references it.
Evidence in the wild
The flag is set to false in many builder configs that expect it to skip the JDK pull:
$ grep -rln "download_jdk.*false" engine/src/flutter/ci/builders/ | head
engine/src/flutter/ci/builders/mac_clang_tidy.json # 7 occurrences
engine/src/flutter/ci/builders/linux_web_engine_test.json
engine/src/flutter/ci/builders/mac_android_aot_engine.json
engine/src/flutter/ci/builders/mac_host_engine.json
engine/src/flutter/ci/builders/windows_arm_host_engine.json
engine/src/flutter/ci/builders/linux_host_desktop_engine.json
engine/src/flutter/ci/builders/linux_host_engine_test.json
engine/src/flutter/ci/builders/windows_host_engine.json
engine/src/flutter/ci/builders/local_engine.json
engine/src/flutter/ci/builders/linux_fuchsia.json
And recently added in linux_arm64_android_aot_engine.json (where I observed this).
Observed sync behavior across four recent gclient runs:
| Host |
download_jdk set |
OpenJDK present after sync |
| linux-x64 |
False |
✅ present (variable ignored) |
| linux-x64 |
not set (default True) |
✅ present |
| linux-arm64 |
False |
❌ absent (correctly — gated by host_cpu == "arm64" exclusion, not by download_jdk) |
| mac |
not set (default True) |
✅ present (default for mac-arm64 path differs but JDK still pulled) |
Suggested fixes (in order of preference)
-
Wire it up. Combine the var with the host check so download_jdk: false actually works:
'condition': 'not (host_os == "linux" and host_cpu == "arm64") and download_jdk',
Then sweep through the builder JSONs and remove "download_jdk": false from any that didn't actually need to skip (and keep it where the author intended to skip).
-
Remove the variable. Delete the declaration on DEPS:97 and remove download_jdk: false from every builder JSON that sets it. Documents that the OpenJDK download is unconditional except on linux-arm64.
-
Document the no-op. Add a comment to DEPS:97 saying "currently unused — kept for future re-wiring" and don't change builder configs. (Worst option — codifies the confusion.)
I'd lean toward (1) because some builders genuinely don't need the JDK (e.g. linux_arm64_android_aot_engine builds gen_snapshot which doesn't touch Java); skipping ~50 MB of CIPD per such builder is small but free.
Not a blocker
This isn't blocking #187591 or anything user-visible. The OpenJDK package is correctly excluded on linux-arm64 hosts (where it doesn't exist as a CIPD package). On linux-x64 it's just always-downloaded, which the code intends. The cleanup is cosmetic + saves a small amount of CIPD bandwidth in CI.
Where I noticed it
While running validation builds for #187591:
- 2026-06-05 linux-x64 cross-compile:
download_jdk: false → OpenJDK present
- 2026-06-05 linux-arm64 native:
download_jdk: false → OpenJDK absent (the host_cpu == "arm64" exclusion fires)
Compared the two sync outputs and confirmed via grep download_jdk DEPS that only the declaration exists.
Summary
The
download_jdkgclient var declared at DEPS:97 is vestigial — no DEPS entry references it as a condition, so setting it has no effect on what gets synced. Multiple builder configs inengine/src/flutter/ci/builders/*.jsonset"download_jdk": falseexpecting to skip the OpenJDK download, but it's a no-op.Steps to reproduce
Why
DEPS:97 declares it with comment "Checkout Java dependencies only on platforms that do not have java installed on path":
But the
engine/src/flutter/third_party/java/openjdkdep block (the only OpenJDK CIPD entry) gates only onhost_os/host_cpu:grep download_jdk DEPSreturns only the declaration on line 97 — nothing else in the file references it.Evidence in the wild
The flag is set to
falsein many builder configs that expect it to skip the JDK pull:And recently added in
linux_arm64_android_aot_engine.json(where I observed this).Observed sync behavior across four recent gclient runs:
download_jdksethost_cpu == "arm64"exclusion, not by download_jdk)Suggested fixes (in order of preference)
Wire it up. Combine the var with the host check so
download_jdk: falseactually works:Then sweep through the builder JSONs and remove
"download_jdk": falsefrom any that didn't actually need to skip (and keep it where the author intended to skip).Remove the variable. Delete the declaration on DEPS:97 and remove
download_jdk: falsefrom every builder JSON that sets it. Documents that the OpenJDK download is unconditional except on linux-arm64.Document the no-op. Add a comment to DEPS:97 saying "currently unused — kept for future re-wiring" and don't change builder configs. (Worst option — codifies the confusion.)
I'd lean toward (1) because some builders genuinely don't need the JDK (e.g.
linux_arm64_android_aot_enginebuildsgen_snapshotwhich doesn't touch Java); skipping ~50 MB of CIPD per such builder is small but free.Not a blocker
This isn't blocking #187591 or anything user-visible. The OpenJDK package is correctly excluded on linux-arm64 hosts (where it doesn't exist as a CIPD package). On linux-x64 it's just always-downloaded, which the code intends. The cleanup is cosmetic + saves a small amount of CIPD bandwidth in CI.
Where I noticed it
While running validation builds for #187591:
download_jdk: false→ OpenJDK presentdownload_jdk: false→ OpenJDK absent (thehost_cpu == "arm64"exclusion fires)Compared the two sync outputs and confirmed via
grep download_jdk DEPSthat only the declaration exists.