Skip to content

Java Runtime Requirements

issuelens[bot] edited this page Oct 12, 2026 · 2 revisions

Java Runtime Requirements

The runtime guidance and legacy-view behavior below are verified against merged source commit a1fd732e13a2cf9b73c9762d3de3cb445acea545 in microsoft/vscode-java-pack, PR #1768. This records merged implementation, not evidence of release or deployment.

Tooling JDK and project JDK

The JDK used to launch the Java language server is separate from the JDK used to compile and run your projects. The tooling minimum depends on the installed Language Support for Java extension and compiler mode. redhat.java 1.57.0 and newer requires JDK 25+ regardless of compiler mode. With the normal compiler configuration, versions 1.39.0-1.56.x require JDK 21+, and earlier supported versions require JDK 17+. A compatible bundled runtime satisfies the tooling requirement; Java 27 project support does not require JDK 27 just to launch the language server.

For older versions with java.jdt.ls.javac.enabled=on, the tooling minimum is JDK 23 for versions 1.36.0-1.40.x, JDK 24 for 1.41.0-1.45.x, and JDK 25 for 1.46.0-1.56.x. off and auto (where supported) keep the normal minimum; versions before 1.36.0 do not support this mode. Runtime guidance, the FAQ, and the legacy tooling-JDK picker share these requirements, which do not restrict project JDK choices.

Configuring Java

Java: Configure Java Runtime opens the project-settings JDK page. Its local-JDK picker changes the selected project's JDK, not the JDK used to launch the language server. Older project targets remain supported through java.configuration.runtimes and your Maven or Gradle build configuration.

To set the language-server launch JDK explicitly, configure java.jdt.ls.java.home. Open the Java logs (java.open.logs) for startup diagnostics. Runtime selection and startup diagnostics belong to redhat.java; Java Pack does not probe tooling candidates, activate the language extension to obtain runtime information, or automatically open runtime configuration based on its own checks.

Restored legacy runtime tabs

Previously opened legacy runtime tabs can still be restored for compatibility; they are not opened by the current Java: Configure Java Runtime command. These tabs show the runtime reported by redhat.java, with Refresh and explicit JDK browsing/installation actions when no runtime is reported. Missing information is not treated as a startup failure, and upstream errors are shown alongside any available project configuration. The legacy tab's Locate an Existing JDK action saves an explicit tooling choice to java.jdt.ls.java.home, unlike the current project-settings picker.

That explicit legacy selection checks for javac and the shared tooling minimum before saving globally; it does not raise project JDK requirements. Project-JDK disk discovery remains separate from tooling metadata. getToolingRuntimeInfo() reads an already-active extension's javaRequirement.tooling_jre and tooling_jre_version; only upstream Error status creates a tooling error. A reported runtime below the minimum or a configured/reported path mismatch produces a factual warning, not a replacement-runtime search. [1][2]

Project inventory failures do not hide the reported language-server runtime or successfully queried projects. The legacy tab displays the query errors and indicates when project information could not be fully loaded; projects with unavailable type information are not treated as ordinary unmanaged projects.

Sources and validation

References below are in microsoft/vscode-java-pack at full source commit a1fd732e13a2cf9b73c9762d3de3cb445acea545, PR #1768; source identity microsoft/vscode-java-pack#1768:a1fd732e13a2cf9b73c9762d3de3cb445acea545.

Clone this wiki locally