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

  1. Set the run configuration / project SDK to Java 8 or newer (the application itself does not have to run on 8 — the launcher does)
  2. 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)
  3. 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

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


AI-assisted analysis of JetBrains/intellij-community@be881553f2 (2026-08-14). Data as JSON: /api/errors/1e8a6cd3a794b748. Report an issue: GitHub.