oraios/serena · error · FileNotFoundError
Gradle Java home not found: {gradle_java_home}. Fix: update
Error message
Gradle Java home not found: {gradle_java_home}. Fix: update path in ~/.serena/serena_config.yml (ls_specific_settings -> java -> gradle_java_home), or remove the setting to use JAVA_HOME or the bundled JRE fallback What it means
FileNotFoundError raised by _resolve_gradle_java_home when the gradle_java_home configured in ~/.serena/serena_config.yml (ls_specific_settings -> java -> gradle_java_home) does not exist on disk. This setting forces the Java home used for the Gradle daemon/imports; a stale path breaks Gradle project import in JDTLS.
Source
Thrown at src/solidlsp/language_servers/eclipse_jdtls.py:837
def _resolve_gradle_java_home(self) -> str:
"""
Resolve the Java home configured for JDTLS Gradle import settings.
:return: Java home selected from explicit Gradle override, system ``JAVA_HOME`` when enabled, or bundled runtime.
:raises FileNotFoundError: If an explicitly configured ``gradle_java_home`` path does not exist.
"""
# explicit Gradle override...
gradle_java_home = self._custom_settings.get("gradle_java_home")
if gradle_java_home is not None:
if not os.path.exists(gradle_java_home):
error_msg = (
f"Gradle Java home not found: {gradle_java_home}. "
f"Fix: update path in ~/.serena/serena_config.yml (ls_specific_settings -> java -> gradle_java_home), "
f"or remove the setting to use JAVA_HOME or the bundled JRE fallback"
)
log.error(error_msg)
raise FileNotFoundError(error_msg)
log.info(f"Using Gradle Java home from custom location: {gradle_java_home}")
return gradle_java_home
# system JAVA_HOME fallback...
use_system_java_home = self._custom_settings.get("use_system_java_home", False)
if use_system_java_home:
system_java_home = os.environ.get("JAVA_HOME")
if system_java_home:
log.info(f"Using system JAVA_HOME for Gradle: {system_java_home}")
return system_java_home
log.warning("use_system_java_home is set but JAVA_HOME is not set in environment, falling back to bundled JRE for Gradle")
# bundled runtime fallback...
log.info(f"Using bundled JRE for Gradle: {self.runtime_dependency_paths.jre_path}")
return self.runtime_dependency_paths.jre_path
def _resolve_configured_runtimes(self) -> list[dict[str, Any]]:
"""View on GitHub (pinned to 7fcbca7e62)
Solutions
- Update gradle_java_home in ~/.serena/serena_config.yml to an existing JDK home
- Remove the gradle_java_home setting to fall back to JAVA_HOME or the bundled JRE
- Verify the path exists: ls <gradle_java_home>/bin/java
- If the JDK moved after an upgrade, point the setting at the new directory
Example fix
# before (~/.serena/serena_config.yml)
ls_specific_settings:
java:
gradle_java_home: /usr/lib/jvm/java-17-temurin # deleted
# after
ls_specific_settings:
java:
gradle_java_home: /usr/lib/jvm/temurin-21-jdk-amd64 Defensive patterns
Strategy: validation
Validate before calling
from pathlib import Path
import yaml
def validate_gradle_java_home(cfg_path: str = "~/.serena/serena_config.yml") -> bool:
cfg = yaml.safe_load(Path(cfg_path).expanduser().read_text())
p = cfg.get("ls_specific_settings", {}).get("java", {}).get("gradle_java_home")
return p is None or Path(p).is_dir() Type guard
def gradle_java_home_valid(cfg: dict) -> bool:
p = cfg.get("ls_specific_settings", {}).get("java", {}).get("gradle_java_home")
return p is None or (isinstance(p, str) and Path(p).is_dir()) Try / catch
try:
params = provider._create_base_initialize_params()
except FileNotFoundError as e:
if str(e).startswith("Gradle Java home not found"):
del cfg["ls_specific_settings"]["java"]["gradle_java_home"] # fall back to JAVA_HOME/bundled JRE
params = provider._create_base_initialize_params()
else:
raise Prevention
- Re-check gradle_java_home after any JDK install/upgrade or machine migration
- Omit the setting unless you specifically need a distinct JDK for Gradle
- Verify the directory exists at startup with a quick Path(p).is_dir() check
- Keep the config machine-specific (do not sync absolute paths across machines)
When it happens
Trigger: _create_base_initialize_params -> _resolve_gradle_java_home where gradle_java_home is set in custom settings but Path(gradle_java_home) does not exist (is_dir check on the path fails).
Common situations: JDK removed or upgraded after the config was written; config copied from another machine; symlink target deleted; path written for Windows used on Linux or vice versa.
Related errors
- Gradle user home directory not found: {custom_gradle_home}.
- Both 'jdtls_path' and 'lombok_path' must be set together in
- Resource paths inside the vscode-java {vscode_java_version}
- Provided jdtls_path '{jdtls_path}' is not an existing direct
- Invalid jdtls_path '{jdtls_path}': 'plugins/' directory not
AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29).
Data as JSON: /api/errors/3fbdb006171ef69e.
Report an issue: GitHub.