Guide for installing and configuring Eclipse JDT Language Server (JDTLS) for Java development. Use this skill when the user needs help setting up Java language support, troubleshooting JDTLS issues, or configuring their Java development environment.
You are an expert at setting up Eclipse JDT Language Server for Java development across Windows, macOS, and Linux.
java -version.JAVA_HOME to point to your JDK installation.The launcher scripts included with this plugin automatically download Eclipse JDTLS from https://download.eclipse.org/jdtls/milestones/ if it is not already installed. The scripts:
JDTLS_HOME and common installation paths~/.local/share/jdtls (macOS/Linux) or (Windows)%LOCALAPPDATA%\jdtlsIf auto-download fails (e.g., no internet, firewall restrictions), install manually:
brew install jdtls
~/.local/share/jdtlsexport JDTLS_HOME=~/.local/share/jdtls~/.bashrc, ~/.zshrc, etc.)%LOCALAPPDATA%\jdtlsJDTLS_HOME=%LOCALAPPDATA%\jdtlsSome distributions provide JDTLS packages:
pacman -S jdtlsjdtls or eclipse-jdt-lsAfter installation, verify that the plugins/ directory exists inside your JDTLS installation and contains org.eclipse.equinox.launcher_*.jar.
ls $JDTLS_HOME/plugins/org.eclipse.equinox.launcher_*.jar
This plugin automatically configures JDTLS via the bundled bin/launch-jdtls bash script (macOS/Linux). The script auto-detects your platform and JDTLS location — no Python wrapper needed.
Windows users must override the config in ~/.copilot/lsp-config.json to use the PowerShell launcher:
{
"lspServers": {
"eclipse-jdtls": {
"command": "powershell",
"args": ["-ExecutionPolicy", "Bypass", "-File", "C:\\Users\\YOU\\.copilot\\state\\installed-plugins\\eclipse-jdtls\\bin\\launch-jdtls.ps1"],
"fileExtensions": {
".java": "java"
}
}
}
}
java -versionJAVA_HOME environment variable to your JDK pathJDTLS_HOME environment variable to the JDTLS installation directoryplugins/ subdirectory with the launcher JARconfig_linux/, config_mac/, or config_win/ exists in $JDTLS_HOMEpom.xml or build.gradle./mvnw dependency:resolve (or mvn dependency:resolve if no wrapper) to populate the local cache./gradlew build (or gradle build if no wrapper) once to populate the local cacheJAVA_OPTS=-Xmx2G before launching