oraios/serena · error · FileNotFoundError

Nextflow Language Server JAR not found at {jar_path}

Error message

Nextflow Language Server JAR not found at {jar_path}

What it means

The Nextflow language server runs from a downloaded JAR. _get_or_install_core_dependency downloads the JAR to jar_path if absent, then re-checks existence; FileNotFoundError means the download produced no file at the expected path, so the server cannot be launched.

Source

Thrown at src/solidlsp/language_servers/nextflow_language_server.py:125

        @classmethod
        def update_dep_hashes(cls) -> None:
            deps = [cls._create_dep_language_server()]
            with DownloadedDependencyHashDatabase.get_instance().update_context() as db:
                for dep in deps:
                    db.update(dep)

        def _get_or_install_core_dependency(self) -> str:
            version = self._custom_settings.get("nextflow_ls_version", DEFAULT_NEXTFLOW_LS_VERSION)
            install_dir = os.path.join(self._ls_resources_dir, f"nextflow_language_server-{version}")
            jar_path = os.path.join(install_dir, NEXTFLOW_LS_JAR_NAME)

            if not os.path.exists(jar_path):
                os.makedirs(install_dir, exist_ok=True)
                log.info("Downloading Nextflow Language Server %s ...", version)
                self._create_dep_language_server(version).download_to(jar_path)

            if not os.path.exists(jar_path):
                raise FileNotFoundError(f"Nextflow Language Server JAR not found at {jar_path}")
            return jar_path

        def _create_launch_command(self, core_path: str) -> list[str]:
            java_exe = self._resolve_java()
            jvm_options = self._custom_settings.get("jvm_options", [])
            if not isinstance(jvm_options, list):
                log.warning("The 'jvm_options' setting should be a list of strings. Ignoring the provided value: %s", jvm_options)
                jvm_options = []
            return [java_exe, *jvm_options, "-jar", core_path]

        def _resolve_java(self) -> str:
            """
            Locates a ``java`` executable (``java_home`` setting -> ``JAVA_HOME`` -> PATH) and verifies
            that it is new enough to run the language server.

            :return: the path to the java executable
            """
            java_exe_name = "java.exe" if os.name == "nt" else "java"

View on GitHub (pinned to 7fcbca7e62)

Solutions

  1. Check the configured server version has a published release/JAR and network access to its download URL, then retry
  2. Manually download the JAR into the install_dir at the exact expected jar_path filename
  3. Inspect logs from download_to for the underlying HTTP error; fix proxy/credentials and clear any partial files

Example fix

# before
ls = SolidLSP("nextflow")  # auto-download fails behind proxy
# after
export HTTPS_PROXY=http://proxy.corp:8080
# or pre-place the jar at the expected install_dir/<version>/*.jar path
ls = SolidLSP("nextflow")
Defensive patterns

Strategy: retry

Validate before calling

import os, glob
install_dir = "<install_dir>"
jars = glob.glob(os.path.join(install_dir, "**", "*.jar"), recursive=True)
assert jars, "Nextflow LS JAR missing; pre-download or fix network access"

Type guard

def jar_present(install_dir: str) -> bool:
    return any(install_dir.rglob("*.jar")) if hasattr(install_dir, 'rglob') else bool(glob.glob(os.path.join(install_dir, '**', '*.jar'), recursive=True))

Try / catch

try:
    ls = SolidLSP("nextflow")
except FileNotFoundError as e:
    if "JAR not found" in str(e):
        manually_download_nextflow_jar(install_dir)
        ls = SolidLSP("nextflow")
    else:
        raise

Prevention

When it happens

Trigger: First-run install where _create_dep_language_server(version).download_to(jar_path) silently fails or writes elsewhere (network error swallowed, wrong version tag with no release asset, proxy interference) and the follow-up os.path.exists(jar_path) check fails.

Common situations: Pinned version has no matching GitHub release asset; network/proxy blocking the download host; read-only or full install_dir preventing the write; offline CI environments.

Related errors


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