JetBrains/intellij-community · error · ExecutionException
IDE doesn't support starting Java processes using Java {0},
Error message
IDE doesn't support starting Java processes using Java {0}, the minimum supported version is Java 8. To solve this, either:
* Change the run configuration to use a newer Java version.
* Set the `idea.no.launcher` custom property to `true` to disable the IntelliJ launcher (additional features like `soft exit` will stop working). What it means
ProcessProxyFactoryImpl.createCommandLineProxy creates the IDE's process proxy (used for terminate/soft-exit support) by attaching idea_rt.jar as a -javaagent or launcher port. Before doing so it resolves the JDK version of the run configuration; if it is older than Java 8 (JavaSdkVersion.JDK_1_8), it throws ExecutionException, because the launcher mechanism (and the agent/launcher port protocol) requires Java 8+.
Source
Thrown at java/execution/impl/src/com/intellij/execution/runners/ProcessProxyFactoryImpl.java:39
public final class ProcessProxyFactoryImpl extends ProcessProxyFactory {
private static final boolean ourMayUseLauncher = !Boolean.getBoolean("idea.no.launcher");
@Override
public ProcessProxy createCommandLineProxy(JavaCommandLine javaCmdLine) throws ExecutionException {
JavaParameters javaParameters = javaCmdLine.getJavaParameters();
String mainClass = javaParameters.getMainClass();
if (ourMayUseLauncher && mainClass != null) {
var rtJarPath = Path.of(JavaSdkUtil.getIdeaRtJarPath());
var runtimeJarFile = Files.isRegularFile(rtJarPath) && rtJarPath.startsWith(PathManager.getHomePath());
if (runtimeJarFile || javaParameters.getModuleName() == null) {
try {
ProcessProxyImpl proxy = new ProcessProxyImpl(StringUtil.getShortName(mainClass));
String port = String.valueOf(proxy.getPortNumber());
JavaSdkVersion jdkVersion = JavaSdkVersionUtil.getJavaSdkVersion(javaParameters.getJdk());
if (jdkVersion != null && !jdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) {
throw new ExecutionException(JavaBundle.message("error.message.ide.does.not.support.starting.processes.using.old.java.app",
jdkVersion.getDescription()));
}
if (runtimeJarFile) {
javaParameters.getVMParametersList().add("-javaagent:" + rtJarPath + '=' + port);
}
else {
JavaSdkUtil.addRtJar(javaParameters.getClassPath());
ParametersList vmParametersList = javaParameters.getVMParametersList();
vmParametersList.defineProperty(AppMainV2.LAUNCHER_PORT_NUMBER, port);
boolean isJava21preview = JavaSdkVersion.JDK_21.equals(jdkVersion) &&
javaParameters.getVMParametersList().getParameters().contains(JavaParameters.JAVA_ENABLE_PREVIEW_PROPERTY);
if (isJava21preview) {
vmParametersList.defineProperty(AppMainV2.LAUNCHER_USE_JDK_21_PREVIEW, Boolean.toString(isJava21preview));
}
View on GitHub (pinned to be881553f2)
Solutions
- Set the run configuration / project SDK to Java 8 or newer (the application itself does not have to run on 8 — the launcher does)
- Or set the custom property -Didea.no.launcher=true in idea.properties / Help | Edit Custom Properties to disable the IDE launcher (at the cost of losing soft-exit and reliable termination features, as the message states)
- If using 'Alternative JRE' in the run config, point it to a JDK >= 8
Example fix
# before: project SDK = 1.7 # after: File | Project Structure | SDKs -> add JDK 8+ and select it (or add idea.no.launcher=true to idea.properties)
Defensive patterns
Strategy: validation
Validate before calling
// before running, verify the resolved JDK meets the launcher minimum
JavaSdkVersion v = JavaSdkVersionUtil.getJavaSdkVersion(javaParameters.getJdk());
if (v != null && !v.isAtLeast(JavaSdkVersion.JDK_1_8)) {
return error("Set a JDK >= 8 or enable -Didea.no.launcher=true");
} Try / catch
try {
ProcessProxyFactory.getInstance().createCommandLineProxy(state);
} catch (ExecutionException e) {
// old JDK: bump SDK or set idea.no.launcher=true and inform user of trade-offs
} Prevention
- Default project/module SDKs to Java 8+ even if you compile with -source/-target 6/7
- Add idea.no.launcher=true to shared idea.properties for legacy-JDK pipelines (documenting lost soft-exit)
- Audit 'Alternative JRE' paths after JDK upgrades
When it happens
Trigger: A run configuration whose resolved JDK (project SDK, module SDK, or alternative JRE) is Java 7 or older (e.g. 1.6/1.7) while the IDE tries to install the process proxy. Triggered on Run/Debug of any Java process with such a JDK.
Common situations: Legacy projects pinned to JDK 6/7; alternative JRE path pointing to an old JDK; CI or containers with only an old IBM/Sun JVM; newer IDEA versions that dropped Java <8 for their tooling.
Related errors
- Unsupported class version error:
- No JDK specified
- No main class defined
- "{0}" action is now supported for execution on the local mac
- Main method is not found
AI-assisted analysis of JetBrains/intellij-community@be881553f2 (2026-08-14).
Data as JSON: /api/errors/1e8a6cd3a794b748.
Report an issue: GitHub.