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
- Switch to default vscode-java VSIX mode by removing jdtls_path/lombok_path from ls_specific_settings.java (VSIX mode may support the platform).
- Check supported platforms in JDTLS_CONFIG_DIR_BY_PLATFORM and run on one of them (x86_64/aarch64 macOS/Linux/Windows variants).
- Upgrade Serena — newer releases may have added the platform mapping.
- Run under an emulated/compatible architecture (e.g. Rosetta on macOS) if applicable.
- 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
- Check PlatformUtils.get_platform_id() support before enabling upstream JDTLS mode on niche platforms (e.g. ARM Linux).
- Prefer the default VSIX mode on platforms not listed in JDTLS_CONFIG_DIR_BY_PLATFORM.
- Keep Serena updated to pick up newly supported platform mappings.
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
- Unsupported platform: {system}
- 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
AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29).
Data as JSON: /api/errors/b4ce7bc64b380cce.
Report an issue: GitHub.