oraios/serena · error · SolidLSPException

Unsupported platform '{platform_id}' for upstream JDTLS mode

Error message

Unsupported platform '{platform_id}' for upstream JDTLS mode. Supported platforms: {sorted(set(JDTLS_CONFIG_DIR_BY_PLATFORM.values()))}.

What it means

This SolidLSPException is raised when the current OS/arch platform ID (from PlatformUtils) has no entry in JDTLS_CONFIG_DIR_BY_PLATFORM, so upstream JDTLS mode cannot select the matching config_<platform>/ directory. It indicates the platform is unsupported for upstream JDTLS mode in this Serena version.

Source

Thrown at src/solidlsp/language_servers/eclipse_jdtls.py:552

                raise SolidLSPException(
                    f"No main Equinox launcher jar found in '{plugins_dir}'. "
                    f"Expected file like 'org.eclipse.equinox.launcher_<version>.jar'. "
                    f"Verify the JDTLS extraction is complete and not corrupted."
                )
            # if multiple versions are present (rare), pick the highest by name
            return matches[-1]

        @staticmethod
        def _resolve_config_dir(jdtls_root: Path) -> Path:
            """
            Locates the platform-specific OSGi configuration directory inside the JDTLS root.

            :return: path to ``config_<platform>/`` directory matching the current OS/arch
            """
            platform_id = PlatformUtils.get_platform_id().value
            config_dir_name = JDTLS_CONFIG_DIR_BY_PLATFORM.get(platform_id)
            if config_dir_name is None:
                raise SolidLSPException(
                    f"Unsupported platform '{platform_id}' for upstream JDTLS mode. "
                    f"Supported platforms: {sorted(set(JDTLS_CONFIG_DIR_BY_PLATFORM.values()))}."
                )
            config_dir = jdtls_root / config_dir_name
            if not config_dir.is_dir():
                raise SolidLSPException(
                    f"Config directory '{config_dir}' not found. "
                    f"This JDTLS distribution does not support platform '{platform_id}'. "
                    f"Verify you downloaded the correct tar.gz for your OS/architecture."
                )
            return config_dir

        @staticmethod
        def _resolve_system_jdk(custom_settings: SolidLSPSettings.CustomLSSettings) -> tuple[str, str]:
            """
            Resolves the system-installed JDK home and ``java`` executable, validates the version.

            The ``java`` executable is located by priority: ``java_home`` setting ->

View on GitHub (pinned to 7fcbca7e62)

Solutions

  1. Switch to default vscode-java VSIX mode by removing jdtls_path/lombok_path from ls_specific_settings.java (VSIX mode may support the platform).
  2. Check supported platforms in JDTLS_CONFIG_DIR_BY_PLATFORM and run on one of them (x86_64/aarch64 macOS/Linux/Windows variants).
  3. Upgrade Serena — newer releases may have added the platform mapping.
  4. Run under an emulated/compatible architecture (e.g. Rosetta on macOS) if applicable.
  5. File/patch an upstream issue adding your platform to the mapping table.

Example fix

// before (unsupported platform, upstream mode)
{"ls_specific_settings": {"java": {"jdtls_path": "/opt/jdtls", "lombok_path": ".../lombok.jar"}}}
// after (fall back to VSIX mode)
{"ls_specific_settings": {"java": {}}}
Defensive patterns

Strategy: validation

Validate before calling

from solidlsp.util.platform_utils import PlatformUtils  # adjust import
cfg = settings.get('ls_specific_settings', {}).get('java', {})
if cfg.get('jdtls_path') and PlatformUtils.get_platform_id().value not in SUPPORTED_JDTLS_PLATFORMS:
    cfg.pop('jdtls_path'); cfg.pop('lombok_path', None)  # use VSIX mode instead

Try / catch

try:
    ls = SolidLSP(java_config)
except SolidLSPException as e:
    if 'Unsupported platform' in str(e):
        cfg = java_config['ls_specific_settings']['java']
        cfg.pop('jdtls_path', None); cfg.pop('lombok_path', None)
        ls = SolidLSP(java_config)  # default VSIX mode
    else:
        raise

Prevention

When it happens

Trigger: _setup_from_existing_install calls _resolve_config_dir during startup on an OS/arch combination (e.g. unusual linux arch like linux-arm64, freebsd, windows variant) whose PlatformUtils platform id is absent from the mapping table.

Common situations: Running Serena on ARM Linux or another niche platform while using upstream JDTLS mode; PlatformUtils returning a new platform id not yet covered by the table; cross-compiled/container environments reporting unexpected platform identifiers.

Related errors


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