Describe the issue
Eclipse JDT Language Server fails to initialize when it is launched with Espresso Java 25 on macOS.
The JDT LS initialization request eventually times out after 120 seconds. During startup, Espresso reports that it failed to link the Equinox native splash method:
[java] WARNING: Failed to link native method:
EspressoMethod<Lorg/eclipse/equinox/launcher/JNIBridge;._update_splash()V>
The same JDT LS installation starts normally when JAVA_HOME points to a standard Oracle GraalVM / HotSpot Java 25 installation.
Environment
- Operating system: macOS, Apple Silicon (aarch64)
- Espresso:
- Java version: 25
- Distribution:
espresso-java25-25.0.0-macos-aarch64
- Working JVM:
- Oracle GraalVM 25.2.4
- Java 25.0.4
- HotSpot VM
- Eclipse JDT LS:
1.58.0-202604151538
- Client: Zed with Java extension
6.8.24
Espresso reports:
java version "25"
Espresso 64-Bit VM (build 25-espresso-25.0.0)
The working JVM reports:
java version "25.0.4"
Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 25.2.4+7.1
Steps to reproduce
-
Install Eclipse JDT Language Server 1.58.0-202604151538.
-
Set JAVA_HOME to Espresso:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/espresso-java25-25.0.0-macos-aarch64"
-
Start JDT LS using its bin/jdtls launcher.
-
Send the LSP initialize request.
Actual behavior
JDT LS does not finish initialization. The client times out after 120 seconds:
Cancelled LSP request task for "initialize" id 0 which took over 120s
Failed to start language server "jdtls"
Request timed out
Espresso also logs:
[java] WARNING: Failed to link native method:
EspressoMethod<Lorg/eclipse/equinox/launcher/JNIBridge;._update_splash()V>
The stalled JDT LS process remains running after the timeout.
Expected behavior
JDT LS should initialize successfully under Espresso, or Espresso should handle the optional Equinox splash-screen JNI method without preventing Eclipse/Equinox startup.
Workaround
Configure JDT LS to use a standard HotSpot-based JVM:
{
"java_home": "/Library/Java/JavaVirtualMachines/graalvm-25.2.4+7.1/Contents/Home"
}
With this change, the same JDT LS installation and workspace initialize normally.
Additional information
The failure appears related to the Equinox launcher JNI bridge:
org.eclipse.equinox.launcher.JNIBridge._update_splash()
No matching issue was found in the Graal, Eclipse JDT LS, or Zed Java extension issue trackers.
Please let me know if an Espresso trace or a minimal standalone Equinox reproduction would be useful.
Describe the issue
Eclipse JDT Language Server fails to initialize when it is launched with Espresso Java 25 on macOS.
The JDT LS initialization request eventually times out after 120 seconds. During startup, Espresso reports that it failed to link the Equinox native splash method:
The same JDT LS installation starts normally when
JAVA_HOMEpoints to a standard Oracle GraalVM / HotSpot Java 25 installation.Environment
espresso-java25-25.0.0-macos-aarch641.58.0-2026041515386.8.24Espresso reports:
The working JVM reports:
Steps to reproduce
Install Eclipse JDT Language Server
1.58.0-202604151538.Set
JAVA_HOMEto Espresso:Start JDT LS using its
bin/jdtlslauncher.Send the LSP
initializerequest.Actual behavior
JDT LS does not finish initialization. The client times out after 120 seconds:
Espresso also logs:
The stalled JDT LS process remains running after the timeout.
Expected behavior
JDT LS should initialize successfully under Espresso, or Espresso should handle the optional Equinox splash-screen JNI method without preventing Eclipse/Equinox startup.
Workaround
Configure JDT LS to use a standard HotSpot-based JVM:
{ "java_home": "/Library/Java/JavaVirtualMachines/graalvm-25.2.4+7.1/Contents/Home" }With this change, the same JDT LS installation and workspace initialize normally.
Additional information
The failure appears related to the Equinox launcher JNI bridge:
No matching issue was found in the Graal, Eclipse JDT LS, or Zed Java extension issue trackers.
Please let me know if an Espresso trace or a minimal standalone Equinox reproduction would be useful.