Skip to content

Commit c9712a3

Browse files
authored
Configure JVM toolchain directly in the kotlin block (#4808)
1 parent 17c6b14 commit c9712a3

File tree

13 files changed

+21
-77
lines changed

13 files changed

+21
-77
lines changed

build-logic/src/main/kotlin/ktorbuild.kmp.gradle.kts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)
66

7+
import ktorbuild.KtorBuildExtension
78
import ktorbuild.internal.*
89
import ktorbuild.internal.gradle.maybeNamed
910
import ktorbuild.targets.*
@@ -18,6 +19,7 @@ plugins {
1819
}
1920

2021
kotlin {
22+
jvmToolchain(KtorBuildExtension.DEFAULT_JDK)
2123
explicitApi()
2224

2325
compilerOptions {
@@ -29,15 +31,6 @@ kotlin {
2931

3032
applyHierarchyTemplate(KtorTargets.hierarchyTemplate)
3133
addTargets(ktorBuild.targets)
32-
33-
// Specify JVM toolchain later to prevent it from being evaluated before it was configured.
34-
// TODO: Remove `afterEvaluate` when the BCV issue triggering JVM toolchain evaluation is fixed
35-
// https://github.com/Kotlin/binary-compatibility-validator/issues/286
36-
afterEvaluate {
37-
jvmToolchain {
38-
languageVersion = ktorBuild.jvmToolchain
39-
}
40-
}
4134
}
4235

4336
val targets = ktorBuild.targets

build-logic/src/main/kotlin/ktorbuild/KtorBuildExtension.kt

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,18 @@
44

55
package ktorbuild
66

7-
import ktorbuild.internal.gradle.finalizedOnRead
87
import ktorbuild.targets.KtorTargets
98
import org.gradle.api.JavaVersion
109
import org.gradle.api.model.ObjectFactory
11-
import org.gradle.api.provider.Property
1210
import org.gradle.api.provider.Provider
1311
import org.gradle.api.provider.ProviderFactory
1412
import org.gradle.internal.os.OperatingSystem
1513
import org.gradle.jvm.toolchain.JavaLanguageVersion
1614
import org.gradle.kotlin.dsl.newInstance
17-
import org.gradle.kotlin.dsl.property
1815
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
1916
import javax.inject.Inject
2017

21-
abstract class KtorBuildExtension(
22-
objects: ObjectFactory,
18+
abstract class KtorBuildExtension private constructor(
2319
providers: ProviderFactory,
2420
val targets: KtorTargets,
2521
) {
@@ -28,7 +24,7 @@ abstract class KtorBuildExtension(
2824
constructor(
2925
objects: ObjectFactory,
3026
providers: ProviderFactory,
31-
) : this(objects, providers, targets = objects.newInstance())
27+
) : this(providers, targets = objects.newInstance())
3228

3329
private val buildingOnTeamCity: Provider<Boolean> =
3430
providers.environmentVariable("TEAMCITY_VERSION").map(String::isNotBlank)
@@ -39,19 +35,6 @@ abstract class KtorBuildExtension(
3935
.orElse(buildingOnTeamCity)
4036
.orElse(false)
4137

42-
/**
43-
* The JDK version to be used to build the project.
44-
* By default, the minimal supported JDK version is used.
45-
*/
46-
val jvmToolchain: Property<JavaLanguageVersion> =
47-
objects.property<JavaLanguageVersion>()
48-
.convention(DEFAULT_JDK)
49-
.finalizedOnRead()
50-
51-
fun jvmToolchain(version: Int) {
52-
jvmToolchain.set(JavaLanguageVersion.of(version))
53-
}
54-
5538
/**
5639
* The JDK version to be used for testing.
5740
*
@@ -93,12 +76,12 @@ abstract class KtorBuildExtension(
9376
const val NAME = "ktorBuild"
9477

9578
/** The default (minimal) JDK version used for building the project. */
96-
private val DEFAULT_JDK = JavaLanguageVersion.of(8)
79+
const val DEFAULT_JDK = 8
9780

98-
/** The default (minimal) Kotlin version used as API version. */
81+
/** The default (minimal) Kotlin version used as an API version. */
9982
private val DEFAULT_KOTLIN_API_VERSION = KotlinVersion.KOTLIN_2_0
10083

101-
/** The default Kotlin version used as Language version. */
84+
/** The default Kotlin version used as a Language version. */
10285
private val DEFAULT_KOTLIN_LANGUAGE_VERSION = KotlinVersion.KOTLIN_2_1
10386
}
10487
}

build-logic/src/main/kotlin/ktorbuild/internal/Accessors.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package ktorbuild.internal
66

77
import ktorbuild.KtorBuildExtension
88
import org.gradle.api.Project
9+
import org.gradle.api.plugins.JavaPluginExtension
910
import org.gradle.kotlin.dsl.getByType
1011
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
1112

@@ -16,5 +17,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
1617

1718
internal val Project.ktorBuild: KtorBuildExtension get() = extensions.getByType()
1819

20+
internal val Project.java: JavaPluginExtension get() = extensions.getByType()
21+
1922
internal fun Project.kotlin(configure: KotlinMultiplatformExtension.() -> Unit) =
2023
extensions.configure("kotlin", configure)

build-logic/src/main/kotlin/ktorbuild/internal/gradle/Property.kt

Lines changed: 0 additions & 20 deletions
This file was deleted.

build-logic/src/main/kotlin/ktorbuild/targets/JvmConfig.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package ktorbuild.targets
66

77
import ktorbuild.ProjectTag
88
import ktorbuild.addProjectTag
9+
import ktorbuild.internal.java
910
import ktorbuild.internal.kotlin
1011
import ktorbuild.internal.ktorBuild
1112
import ktorbuild.internal.libs
@@ -44,7 +45,7 @@ private fun Project.configureTests() {
4445
maxHeapSize = "2g"
4546
exclude("**/*StressTest*")
4647
useJUnitPlatform()
47-
configureJavaToolchain(ktorBuild.jvmToolchain, ktorBuild.jvmTestToolchain)
48+
configureJavaToolchain(java.toolchain.languageVersion, ktorBuild.jvmTestToolchain)
4849
}
4950

5051
tasks.register<Test>("stressTest") {
@@ -57,7 +58,7 @@ private fun Project.configureTests() {
5758
systemProperty("enable.stress.tests", "true")
5859
include("**/*StressTest*")
5960
useJUnitPlatform()
60-
configureJavaToolchain(ktorBuild.jvmToolchain, ktorBuild.jvmTestToolchain)
61+
configureJavaToolchain(java.toolchain.languageVersion, ktorBuild.jvmTestToolchain)
6162
}
6263
}
6364

ktor-client/ktor-client-java/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ plugins {
77
id("test-server")
88
}
99

10-
ktorBuild {
10+
kotlin {
1111
// Package java.net.http was introduced in Java 11
1212
jvmToolchain(11)
13-
}
1413

15-
kotlin {
1614
sourceSets {
1715
jvmMain.dependencies {
1816
api(project(":ktor-client:ktor-client-core"))

ktor-client/ktor-client-jetty-jakarta/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@ plugins {
88
id("ktorbuild.project.library")
99
}
1010

11-
ktorBuild {
11+
kotlin {
1212
// The minimal JVM version required for Jetty 10+
1313
jvmToolchain(11)
14-
}
1514

16-
kotlin {
1715
sourceSets {
1816
jvmMain.dependencies {
1917
api(project(":ktor-client:ktor-client-core"))

ktor-server/ktor-server-jetty-jakarta/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@ plugins {
88
id("ktorbuild.project.library")
99
}
1010

11-
ktorBuild {
11+
kotlin {
1212
// The minimal JVM version required for Jetty 10+
1313
jvmToolchain(11)
14-
}
1514

16-
kotlin {
1715
sourceSets {
1816
jvmMain.dependencies {
1917
api(project(":ktor-server:ktor-server-core"))

ktor-server/ktor-server-jetty-jakarta/ktor-server-jetty-test-http2-jakarta/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@ plugins {
88
id("ktorbuild.project.internal")
99
}
1010

11-
ktorBuild {
11+
kotlin {
1212
// The minimal JVM version required for Jetty 10+
1313
jvmToolchain(11)
14-
}
1514

16-
kotlin {
1715
sourceSets {
1816
jvmTest.dependencies {
1917
api(project(":ktor-server:ktor-server-test-base"))

ktor-server/ktor-server-plugins/ktor-server-jte/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ plugins {
66
id("ktorbuild.project.server-plugin")
77
}
88

9-
ktorBuild {
9+
kotlin {
1010
// The minimal JDK version required for jte 3.0+
1111
jvmToolchain(17)
12-
}
1312

14-
kotlin {
1513
sourceSets {
1614
jvmMain.dependencies {
1715
api(libs.jte)

ktor-server/ktor-server-plugins/ktor-server-openapi/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ plugins {
66
id("ktorbuild.project.server-plugin")
77
}
88

9-
ktorBuild {
9+
kotlin {
1010
// The minimal JDK version required for Swagger Codegen
1111
jvmToolchain(11)
12-
}
1312

14-
kotlin {
1513
sourceSets {
1614
jvmMain.dependencies {
1715
implementation(project(":ktor-server:ktor-server-plugins:ktor-server-html-builder"))

ktor-server/ktor-server-servlet-jakarta/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@ plugins {
88
id("ktorbuild.project.library")
99
}
1010

11-
ktorBuild {
11+
kotlin {
1212
jvmToolchain(11)
13-
}
1413

15-
kotlin {
1614
sourceSets {
1715
jvmMain.dependencies {
1816
api(project(":ktor-server:ktor-server-core"))

ktor-server/ktor-server-tomcat-jakarta/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@ plugins {
88
id("ktorbuild.project.library")
99
}
1010

11-
ktorBuild {
11+
kotlin {
1212
// The minimal JVM version required for Tomcat 10
1313
jvmToolchain(11)
14-
}
1514

16-
kotlin {
1715
sourceSets {
1816
jvmMain.dependencies {
1917
api(project(":ktor-server:ktor-server-core"))

0 commit comments

Comments
 (0)