{"record":{"id":"592b88371cdae511","repo":"oraios/serena","slug":"gradle-user-home-directory-not-found-custom-grad","errorCode":null,"errorMessage":"Gradle user home directory not found: {custom_gradle_home}. Fix: create the directory, update path in ~/.serena/serena_config.yml (ls_specific_settings -> java -> gradle_user_home), or remove the setting to use default (~/.gradle)","messagePattern":"Gradle user home directory not found: (.+?)\\. Fix: create the directory, update path in ~/\\.serena/serena_config\\.yml \\(ls_specific_settings -> java -> gradle_user_home\\), or remove the setting to use default \\(~/\\.gradle\\)","errorType":"exception","errorClass":"FileNotFoundError","httpStatus":null,"severity":"error","filePath":"src/solidlsp/language_servers/eclipse_jdtls.py","lineNumber":944,"sourceCode":"            maven_settings_path = default_maven_settings_path\n            log.info(f\"Using Maven settings from default location: {maven_settings_path}\")\n        else:\n            maven_settings_path = None\n            log.info(f\"Maven settings not found at default location ({default_maven_settings_path}), will use JDTLS defaults\")\n\n        # Gradle user home: default to ~/.gradle\n        default_gradle_home = os.path.join(os.path.expanduser(\"~\"), \".gradle\")\n        custom_gradle_home = self._custom_settings.get(\"gradle_user_home\")\n        if custom_gradle_home is not None:\n            # User explicitly provided a path\n            if not os.path.exists(custom_gradle_home):\n                error_msg = (\n                    f\"Gradle user home directory not found: {custom_gradle_home}. \"\n                    f\"Fix: create the directory, update path in ~/.serena/serena_config.yml (ls_specific_settings -> java -> gradle_user_home), \"\n                    f\"or remove the setting to use default (~/.gradle)\"\n                )\n                log.error(error_msg)\n                raise FileNotFoundError(error_msg)\n            gradle_user_home = custom_gradle_home\n            log.info(f\"Using Gradle user home from custom location: {gradle_user_home}\")\n        elif os.path.exists(default_gradle_home):\n            gradle_user_home = default_gradle_home\n            log.info(f\"Using Gradle user home from default location: {gradle_user_home}\")\n        else:\n            gradle_user_home = None\n            log.info(f\"Gradle user home not found at default location ({default_gradle_home}), will use JDTLS defaults\")\n\n        # Lombok-generated symbols (getX/setX/builder()/equals/hashCode/toString/...): JDTLS filters\n        # these out of documentSymbol results by default. Without them, find_symbol/get_symbols_overview\n        # return only user-written sources, which breaks navigation around @Data/@Builder/@Getter/@Setter\n        # classes. Default to True so agentic workflows can find_symbol -> replace_symbol_body on generated\n        # members. Requires JDTLS commit b2d8952 or newer (vscode-java >= 1.53.0, or upstream JDTLS\n        # snapshot after 2026-02-24); older servers ignore the unknown preference key silently.\n        # See eclipse-jdtls/eclipse.jdt.ls#3706.\n        lombok_show_generated = self._custom_settings.get(\"lombok_show_generated\", True)\n","sourceCodeStart":926,"sourceCodeEnd":962,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/solidlsp/language_servers/eclipse_jdtls.py#L926-L962","documentation":"A custom Gradle user home configured via ls_specific_settings.java.gradlele_user_home in ~/.serena/serena_config.yml must be an existing directory; JDTLS passes it as the Gradle user home for dependency resolution. If the directory is missing, _create_base_initialize_params raises FileNotFoundError with instructions to fix or drop the setting.","triggerScenarios":"Starting the JDTLS language server while gradle_user_home in serena_config.yml points to a directory that does not exist — deleted cache dir, typo, or a path only present on another machine.","commonSituations":"Pointing at a moved ~/.gradle directory; cleaning ~/.gradle and forgetting the custom entry; CI containers lacking the configured GRADLE_USER_HOME; typos like /home/usr/.gradle.","solutions":["Create the directory: mkdir -p <custom_gradle_home>","Update ls_specific_settings -> java -> gradle_user_home in ~/.serena/serena_config.yml to the correct directory","Or remove the setting to fall back to the default (~/.gradle)","Confirm with: test -d <path> && echo exists"],"exampleFix":"// before\n$ gradle_user_home: /opt/gradle-home   # never created\n// after\n$ mkdir -p /opt/gradle-home\n# or remove the gradle_user_home line from serena_config.yml\n","handlingStrategy":"validation","validationCode":"import os, yaml\ncfg = yaml.safe_load(open(os.path.expanduser('~/.serena/serena_config.yml')))\ng = cfg.get('ls_specific_settings', {}).get('java', {}).get('gradle_user_home')\nif g and not os.path.isdir(os.path.expanduser(g)):\n    print(f\"gradle user home missing: {g}\")","typeGuard":"def gradle_home_ok(path: str | None) -> bool:\n    import os\n    return path is None or os.path.isdir(os.path.expanduser(path))","tryCatchPattern":"try:\n    server = LanguageServer.create(LanguageServerId.JAVA, ...)\nexcept FileNotFoundError as e:\n    logger.error(\"Gradle home issue: %s\", e)\n    # mkdir -p the directory or drop the setting, then retry","preventionTips":["Create the gradle_user_home directory before referencing it in config","Pre-create directories in Dockerfiles/CI before launching Serena","Avoid custom gradle_user_home unless needed; default ~/.gradle is safer","Re-check the entry after cleaning ~/.gradle or moving caches"],"tags":["java","gradle","file-not-found","configuration"],"backgroundTag":"config-path-not-found","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}