diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleApplicationEnvironmentProvider.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleApplicationEnvironmentProvider.java index 16a83965063b..1df085742718 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleApplicationEnvironmentProvider.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/build/GradleApplicationEnvironmentProvider.java @@ -15,12 +15,15 @@ */ package org.jetbrains.plugins.gradle.execution.build; +import com.intellij.execution.CantRunException; +import com.intellij.execution.ExecutionBundle; import com.intellij.execution.Executor; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.application.ApplicationConfiguration; import com.intellij.execution.configurations.JavaParameters; import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.util.ExecutionErrorDialog; import com.intellij.execution.util.JavaParametersUtil; import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings; import com.intellij.openapi.externalSystem.service.execution.ExternalSystemRunConfiguration; @@ -28,7 +31,11 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.externalSystem.util.ExternalSystemUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.projectRoots.JavaSdkType; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.projectRoots.SdkTypeId; import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.psi.PsiClass; import com.intellij.task.ExecuteRunConfigurationTask; import org.intellij.lang.annotations.Language; @@ -70,6 +77,20 @@ public class GradleApplicationEnvironmentProvider implements GradleExecutionEnvi JavaParametersUtil.configureConfiguration(params, applicationConfiguration); params.getVMParametersList().addParametersString(applicationConfiguration.getVMParameters()); + String javaExePath = null; + try { + final Sdk jdk = JavaParametersUtil.createProjectJdk(project, applicationConfiguration.getAlternativeJrePath()); + if (jdk == null) throw new RuntimeException(ExecutionBundle.message("run.configuration.error.no.jdk.specified")); + final SdkTypeId type = jdk.getSdkType(); + if (!(type instanceof JavaSdkType)) throw new RuntimeException(ExecutionBundle.message("run.configuration.error.no.jdk.specified")); + javaExePath = ((JavaSdkType)type).getVMExecutablePath(jdk); + if (javaExePath == null) throw new RuntimeException(ExecutionBundle.message("run.configuration.cannot.find.vm.executable")); + javaExePath = FileUtil.toSystemIndependentName(javaExePath); + } + catch (CantRunException e) { + ExecutionErrorDialog.show(e, "Cannot use specified JRE", project); + } + StringBuilder parametersString = new StringBuilder(); for (String parameter : params.getProgramParametersList().getParameters()) { parametersString.append("args '").append(parameter).append("'\n"); @@ -110,6 +131,8 @@ public class GradleApplicationEnvironmentProvider implements GradleExecutionEnvi " rootProject.allprojects {\n" + " if(project.path == '" + gradlePath + "' && project.sourceSets) {\n" + " project.tasks.create(name: '" + runAppTaskName + "', overwrite: true, type: JavaExec) {\n" + + (javaExePath != null ? + " executable = '" + javaExePath + "'\n" : "") + " classpath = project.sourceSets.'" + sourceSetName + "'.runtimeClasspath\n" + " main = '" + mainClass.getQualifiedName() + "'\n" + parametersString.toString() +