diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/tasks/KotlinJvmRun.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/tasks/KotlinJvmRun.kt index edba6a78b3b..789cbb7937d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/tasks/KotlinJvmRun.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/tasks/KotlinJvmRun.kt @@ -1,10 +1,12 @@ package org.jetbrains.kotlin.gradle.targets.jvm.tasks import org.gradle.api.file.FileCollection +import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.JavaExec import org.gradle.api.tasks.TaskProvider +import org.gradle.jvm.toolchain.JavaToolchainService import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation @@ -17,6 +19,7 @@ import org.jetbrains.kotlin.gradle.plugin.internal.usedAtConfigurationTime import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.internal import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget +import org.jetbrains.kotlin.gradle.utils.getByType import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.property import org.jetbrains.kotlin.tooling.core.UnsafeApi @@ -118,6 +121,11 @@ private fun KotlinJvmTarget.registerKotlinJvmRun(taskName: String, compilation: .orElse(project.providers.systemProperty("mainClass").usedAtConfigurationTime()) .orElse(mainClass).usedAtConfigurationTime() ) + + project.extensions.findByType(JavaToolchainService::class.java)?.let { toolchainService -> + val toolchain = project.extensions.getByType(JavaPluginExtension::class.java).toolchain + task.javaLauncher.convention(toolchainService.launcherFor(toolchain)) + } } @OptIn(UnsafeApi::class) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinJvmRunTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinJvmRunTest.kt index 7490a5f8e0b..1cfc569acbc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinJvmRunTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinJvmRunTest.kt @@ -7,12 +7,15 @@ package org.jetbrains.kotlin.gradle.unitTests +import org.gradle.api.JavaVersion import org.gradle.api.tasks.JavaExec import org.jetbrains.kotlin.gradle.dependencyResolutionTests.mavenCentralCacheRedirector import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.configurationResult import org.jetbrains.kotlin.gradle.plugin.launch import org.jetbrains.kotlin.gradle.util.* +import org.jetbrains.kotlin.konan.target.HostManager +import org.junit.Assume import kotlin.test.* class KotlinJvmRunTest { @@ -161,5 +164,24 @@ class KotlinJvmRunTest { checkDiagnostics("jvmRunTask-conflict") } + @Test + fun `test - jvmRun task is using kotlin configured toolchain - jvm 11`() = buildProjectWithMPP().runLifecycleAwareTest { + Assume.assumeFalse("https://github.com/gradle/native-platform/issues/274", HostManager.hostIsMingw) + val kotlin = multiplatformExtension + kotlin.jvmToolchain(11) + kotlin.jvm() + configurationResult.await() + assertEquals(JavaVersion.VERSION_11, assertNotNull(kotlin.jvm().mainRun.await()).task.get().javaVersion) + } + + @Test + fun `test - jvmRun task is using kotlin configured toolchain - jvm 17`() = buildProjectWithMPP().runLifecycleAwareTest { + Assume.assumeFalse("https://github.com/gradle/native-platform/issues/274", HostManager.hostIsMingw) + val kotlin = multiplatformExtension + kotlin.jvmToolchain(17) + kotlin.jvm() + configurationResult.await() + assertEquals(JavaVersion.VERSION_17, assertNotNull(kotlin.jvm().mainRun.await()).task.get().javaVersion) + } }