{"record":{"id":"3fbdb006171ef69e","repo":"oraios/serena","slug":"gradle-java-home-not-found-gradle-java-home-fi","errorCode":null,"errorMessage":"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","messagePattern":"Gradle Java home not found: (.+?)\\. 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","errorType":"exception","errorClass":"FileNotFoundError","httpStatus":null,"severity":"error","filePath":"src/solidlsp/language_servers/eclipse_jdtls.py","lineNumber":837,"sourceCode":"\n    def _resolve_gradle_java_home(self) -> str:\n        \"\"\"\n        Resolve the Java home configured for JDTLS Gradle import settings.\n\n        :return: Java home selected from explicit Gradle override, system ``JAVA_HOME`` when enabled, or bundled runtime.\n        :raises FileNotFoundError: If an explicitly configured ``gradle_java_home`` path does not exist.\n        \"\"\"\n        # explicit Gradle override...\n        gradle_java_home = self._custom_settings.get(\"gradle_java_home\")\n        if gradle_java_home is not None:\n            if not os.path.exists(gradle_java_home):\n                error_msg = (\n                    f\"Gradle Java home not found: {gradle_java_home}. \"\n                    f\"Fix: update path in ~/.serena/serena_config.yml (ls_specific_settings -> java -> gradle_java_home), \"\n                    f\"or remove the setting to use JAVA_HOME or the bundled JRE fallback\"\n                )\n                log.error(error_msg)\n                raise FileNotFoundError(error_msg)\n            log.info(f\"Using Gradle Java home from custom location: {gradle_java_home}\")\n            return gradle_java_home\n\n        # system JAVA_HOME fallback...\n        use_system_java_home = self._custom_settings.get(\"use_system_java_home\", False)\n        if use_system_java_home:\n            system_java_home = os.environ.get(\"JAVA_HOME\")\n            if system_java_home:\n                log.info(f\"Using system JAVA_HOME for Gradle: {system_java_home}\")\n                return system_java_home\n            log.warning(\"use_system_java_home is set but JAVA_HOME is not set in environment, falling back to bundled JRE for Gradle\")\n\n        # bundled runtime fallback...\n        log.info(f\"Using bundled JRE for Gradle: {self.runtime_dependency_paths.jre_path}\")\n        return self.runtime_dependency_paths.jre_path\n\n    def _resolve_configured_runtimes(self) -> list[dict[str, Any]]:\n        \"\"\"","sourceCodeStart":819,"sourceCodeEnd":855,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/solidlsp/language_servers/eclipse_jdtls.py#L819-L855","documentation":"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.","triggerScenarios":"_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).","commonSituations":"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.","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"],"exampleFix":"# before (~/.serena/serena_config.yml)\nls_specific_settings:\n  java:\n    gradle_java_home: /usr/lib/jvm/java-17-temurin  # deleted\n# after\nls_specific_settings:\n  java:\n    gradle_java_home: /usr/lib/jvm/temurin-21-jdk-amd64","handlingStrategy":"validation","validationCode":"from pathlib import Path\nimport yaml\ndef validate_gradle_java_home(cfg_path: str = \"~/.serena/serena_config.yml\") -> bool:\n    cfg = yaml.safe_load(Path(cfg_path).expanduser().read_text())\n    p = cfg.get(\"ls_specific_settings\", {}).get(\"java\", {}).get(\"gradle_java_home\")\n    return p is None or Path(p).is_dir()","typeGuard":"def gradle_java_home_valid(cfg: dict) -> bool:\n    p = cfg.get(\"ls_specific_settings\", {}).get(\"java\", {}).get(\"gradle_java_home\")\n    return p is None or (isinstance(p, str) and Path(p).is_dir())","tryCatchPattern":"try:\n    params = provider._create_base_initialize_params()\nexcept FileNotFoundError as e:\n    if str(e).startswith(\"Gradle Java home not found\"):\n        del cfg[\"ls_specific_settings\"][\"java\"][\"gradle_java_home\"]  # fall back to JAVA_HOME/bundled JRE\n        params = provider._create_base_initialize_params()\n    else:\n        raise","preventionTips":["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)"],"tags":["gradle","java","configuration","missing-path"],"backgroundTag":"configured-path-not-found","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}