oraios/serena · error · SolidLSPException
Provided lombok_path '{lombok_path}' does not exist or is no
Error message
Provided lombok_path '{lombok_path}' does not exist or is not a file.
Fix: download lombok jar from https://projectlombok.org/downloads/ or use the one from your local Maven cache (~/.m2/repository/org/projectlombok/lombok/<version>/lombok-<version>.jar). What it means
This SolidLSPException is raised in upstream JDTLS mode when the configured lombok_path does not point to an existing file. JDTLS is launched with lombok as a javaagent, so a valid lombok jar path is mandatory; the error suggests downloading it or reusing the local Maven cache.
Source
Thrown at src/solidlsp/language_servers/eclipse_jdtls.py:497
f"then set ls_specific_settings.java.jdtls_path to the extracted directory."
)
plugins_dir = jdtls_root / "plugins"
if not plugins_dir.is_dir():
raise SolidLSPException(
f"Invalid jdtls_path '{jdtls_path}': 'plugins/' directory not found.\n"
f"Expected upstream JDTLS layout (plugins/, config_<platform>/, features/) at the root. "
f"If you pointed at a vscode-java extension, use '<extension>/server' instead."
)
# resolve the main equinox launcher jar (excluding platform-specific native fragments)
launcher_jar = EclipseJDTLS.DependencyProvider._resolve_launcher_jar(plugins_dir)
# resolve the platform-specific config directory under jdtls_root
config_dir = EclipseJDTLS.DependencyProvider._resolve_config_dir(jdtls_root)
# validate lombok jar exists
if not Path(lombok_path).is_file():
raise SolidLSPException(
f"Provided lombok_path '{lombok_path}' does not exist or is not a file.\n"
f"Fix: download lombok jar from https://projectlombok.org/downloads/ or use the one "
f"from your local Maven cache (~/.m2/repository/org/projectlombok/lombok/<version>/lombok-<version>.jar)."
)
# resolve system JDK (priority: java_home setting -> JAVA_HOME env -> which java),
# interrogate the JVM for its real java.home and validate version >= 21
jre_home_path, jre_path = EclipseJDTLS.DependencyProvider._resolve_system_jdk(custom_settings)
log.info(
f"Using upstream JDTLS at '{jdtls_path}' with system JDK '{jre_home_path}'. "
f"Launcher: {launcher_jar.name}; config: {config_dir.name}; lombok: {lombok_path}"
)
return RuntimeDependencyPaths(
jre_path=jre_path,
jre_home_path=jre_home_path,
jdtls_launcher_jar_path=str(launcher_jar),View on GitHub (pinned to 7fcbca7e62)
Solutions
- Point lombok_path at an existing jar, e.g. find one via: ls ~/.m2/repository/org/projectlombok/lombok/*/lombok-*.jar.
- Otherwise download from https://projectlombok.org/downloads/ and set lombok_path to the downloaded file.
- Replace '~' with an absolute path (or expand it) so the process can resolve it.
- Verify with 'ls -l <lombok_path>' that it is a regular file readable by the user running Serena.
Example fix
// before "lombok_path": "~/.m2/repository/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" (file deleted) // after "lombok_path": "/home/me/.m2/repository/org/projectlombok/lombok/1.18.36/lombok-1.18.36.jar"
Defensive patterns
Strategy: validation
Validate before calling
import os
lp = os.path.expanduser(settings['ls_specific_settings']['java']['lombok_path'])
assert os.path.isfile(lp), f"lombok jar missing at {lp}"
import glob
candidates = glob.glob(os.path.expanduser('~/.m2/repository/org/projectlombok/lombok/*/lombok-*.jar')) Type guard
def is_existing_file(path: str) -> bool:
from pathlib import Path
return Path(path).expanduser().is_file() Try / catch
try:
ls = SolidLSP(java_config)
except SolidLSPException as e:
if 'does not exist or is not a file' in str(e):
raise SystemExit(f"Fix lombok_path: {e}")
raise Prevention
- Use absolute (expanded) paths for lombok_path; never '~' unexpanded.
- Verify the jar exists after Maven cache cleanups.
- Keep a stable copy of the lombok jar in a project/tool directory if the Maven cache is pruned regularly.
- Pin the lombok version used for the javaagent to one present on disk.
When it happens
Trigger: During _setup_from_existing_install, Path(lombok_path).is_file() is False — file absent, path is a directory, symlink broken, or '~' left unexpanded.
Common situations: User wrote lombok_path without expanding '~'; jar deleted by a Maven cache cleanup; versioned path (lombok-<version>.jar) points at a version no longer cached; typo in filename.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- 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
- Config directory '{config_dir}' not found. This JDTLS distri
AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29).
Data as JSON: /api/errors/0c289818aa4738d2.
Report an issue: GitHub.