Add simplified JVM toolchain configuration method in extension

^KT-52867 Fixed
This commit is contained in:
Yahor Berdnikau
2022-06-19 22:35:51 +02:00
committed by Space
parent 7125c14a34
commit 6710d216e1
2 changed files with 46 additions and 0 deletions
@@ -605,6 +605,40 @@ class KotlinJavaToolchainTest : KGPBaseTest() {
}
}
@DisplayName("Toolchain simplified method with JDK version in extension is working")
@GradleTest
internal fun toolchainSimplifiedConfiguration(gradleVersion: GradleVersion) {
project(
projectName = "simple".fullProjectName,
gradleVersion = gradleVersion,
buildJdk = getJdk11().javaHome
) {
//language=Groovy
buildGradle.append(
"""
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.jvm.toolchain.JavaToolchainService
kotlin {
jvmToolchain(8)
}
afterEvaluate {
def toolchain = project.extensions.getByType(JavaPluginExtension.class).toolchain
def service = project.extensions.getByType(JavaToolchainService.class)
//noinspection GroovyUnusedAssignment
def defaultLauncher = service.launcherFor(toolchain)
logger.info("Toolchain jdk path: ${'$'}{defaultLauncher.get().metadata.installationPath.asFile.absolutePath}")
}
""".trimIndent()
)
build("assemble") {
assertJdkHomeIsUsingJdk(getToolchainExecPathFromLogs())
}
}
}
private fun BuildResult.assertJdkHomeIsUsingJdk(
javaexecPath: String
) = assertOutputContains("[KOTLIN] Kotlin compilation 'jdkHome' argument: $javaexecPath")
@@ -10,6 +10,7 @@ import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.internal.plugins.DslObject
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.jvm.toolchain.JavaToolchainSpec
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.*
@@ -74,6 +75,17 @@ abstract class KotlinTopLevelExtension(internal val project: Project) : KotlinTo
toolchainSupport.applyToolchain(action)
}
/**
* Configures [Java toolchain](https://docs.gradle.org/current/userguide/toolchains.html) both for Kotlin JVM and Java tasks.
*
* @param jdkVersion - jdk version as number. For example, 17 for Java 17.
*/
fun jvmToolchain(jdkVersion: Int) {
jvmToolchain {
it.languageVersion.set(JavaLanguageVersion.of(jdkVersion))
}
}
/**
* Configures Kotlin daemon JVM arguments for all tasks in this project.
*