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

  1. Point lombok_path at an existing jar, e.g. find one via: ls ~/.m2/repository/org/projectlombok/lombok/*/lombok-*.jar.
  2. Otherwise download from https://projectlombok.org/downloads/ and set lombok_path to the downloaded file.
  3. Replace '~' with an absolute path (or expand it) so the process can resolve it.
  4. 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

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


AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29). Data as JSON: /api/errors/0c289818aa4738d2. Report an issue: GitHub.