Не подтверждена Коммит e77cf49e создал по автору Osip Fatkullin's avatar Osip Fatkullin Зафиксировано автором GitHub
Просмотр файлов

KTOR-7831 Configure Gradle Daemon JDK (#4500)

* Use JVM 21 (LTS) to run Gradle Daemon
* Migrate test server to jetty-jakarta
* Use test.jdk property to determine JDK to be used for tests
владелец 70435ca5
......@@ -42,6 +42,7 @@ dependencies {
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
}
// Should be synced with gradle/gradle-daemon-jvm.properties
kotlin {
jvmToolchain(8)
jvmToolchain(21)
}
......@@ -50,11 +50,12 @@ fun Project.configureJvm() {
}
}
val testJdk = project.testJdk
val jvmTest = tasks.named<KotlinJvmTest>("jvmTest") {
maxHeapSize = "2g"
exclude("**/*StressTest*")
useJUnitPlatform()
configureJavaToolchain(compileJdk)
configureJavaToolchain(compileJdk, testJdk)
}
tasks.register<Test>("stressTest") {
......@@ -67,7 +68,7 @@ fun Project.configureJvm() {
systemProperty("enable.stress.tests", "true")
include("**/*StressTest*")
useJUnitPlatform()
configureJavaToolchain(compileJdk)
configureJavaToolchain(compileJdk, testJdk)
}
val configuredVersion: String by rootProject.extra
......@@ -83,14 +84,14 @@ fun Project.configureJvm() {
}
}
/**
* On local machine use for tests the JDK used for compilation.
* On CI use the default JDK.
*/
private fun Test.configureJavaToolchain(compileJdk: Int) {
val testJdk = if (CI) currentJdk else compileJdk
val javaToolchains = project.the<JavaToolchainService>()
/** Configure tests against different JDK versions. */
private fun Test.configureJavaToolchain(compileJdk: Int, testJdk: Int) {
if (testJdk < compileJdk) {
enabled = false
return
}
val javaToolchains = project.the<JavaToolchainService>()
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(testJdk)
}
......
......@@ -16,7 +16,24 @@ val HOST_NAME = when {
else -> error("Unknown os name `$OS_NAME`")
}
val currentJdk = JavaVersion.current().majorVersion.toInt()
private var _testJdk = 0
/**
* Retrieves the JDK version for running tests.
*
* Takes the version from property "test.jdk" or uses Gradle JDK by default.
* For example, to run tests against JDK 8, run test task with flag "-Ptest.jdk=8"
* or put this property to `gradle.properties`.
*/
val Project.testJdk: Int
get() {
if (_testJdk == 0) {
_testJdk = rootProject.properties["test.jdk"]?.toString()?.toInt()
?: JavaVersion.current().majorVersion.toInt()
logger.info("Running tests against JDK $_testJdk")
}
return _testJdk
}
val Project.requiredJdkVersion: Int
get() = when {
......
......@@ -10,6 +10,13 @@ plugins {
doctor {
enableTestCaching = false
// Disable JAVA_HOME validation as we use "Daemon JVM discovery" feature
// https://docs.gradle.org/current/userguide/gradle_daemon.html#sec:daemon_jvm_criteria
javaHome {
ensureJavaHomeIsSet = false
ensureJavaHomeMatches = false
}
}
// Always monitor tasks on CI, but disable it locally by default with providing an option to opt-in.
......
/*
* Copyright 2014-2022 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
* Copyright 2014-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/
package test.server
......@@ -7,7 +7,7 @@ package test.server
import io.ktor.network.tls.certificates.*
import io.ktor.server.cio.*
import io.ktor.server.engine.*
import io.ktor.server.jetty.*
import io.ktor.server.jetty.jakarta.*
import test.server.tests.*
import java.io.*
import java.util.concurrent.*
......
......@@ -88,7 +88,7 @@ dependencyResolutionManagement {
}
fun VersionCatalogBuilder.downgradeTestDependencies() {
val testJdk = JavaVersion.current().majorVersion.toInt()
val testJdk = providers.gradleProperty("test.jdk").orNull?.toInt() ?: return
if (testJdk < 11) version("logback", "1.3.14") // Java 8 support dropped in Logback 1.4.x
}
#This file is generated by updateDaemonJvm
toolchainVersion=21
......@@ -99,7 +99,7 @@ ktor-server-compression = { module = "io.ktor:ktor-server-compression", version.
ktor-server-conditional-headers = { module = "io.ktor:ktor-server-conditional-headers", version.ref = "ktor" }
ktor-server-content-negotiation = { module = "io.ktor:ktor-server-content-negotiation", version.ref = "ktor" }
ktor-server-default-headers = { module = "io.ktor:ktor-server-default-headers", version.ref = "ktor" }
ktor-server-jetty = { module = "io.ktor:ktor-server-jetty", version.ref = "ktor" }
ktor-server-jetty = { module = "io.ktor:ktor-server-jetty-jakarta", version.ref = "ktor" }
ktor-server-netty = { module = "io.ktor:ktor-server-netty", version.ref = "ktor" }
ktor-server-status-pages = { module = "io.ktor:ktor-server-status-pages", version.ref = "ktor" }
ktor-server-websockets = { module = "io.ktor:ktor-server-websockets", version.ref = "ktor" }
......
......@@ -58,7 +58,7 @@ kotlin.sourceSets {
api(project(":ktor-client:ktor-client-apache5"))
runtimeOnly(project(":ktor-client:ktor-client-android"))
runtimeOnly(project(":ktor-client:ktor-client-okhttp"))
if (currentJdk >= 11) {
if (testJdk >= 11) {
runtimeOnly(project(":ktor-client:ktor-client-java"))
}
implementation(project(":ktor-client:ktor-client-plugins:ktor-client-logging"))
......
......@@ -24,8 +24,12 @@ include(":ktor-server:ktor-server-test-base")
include(":ktor-server:ktor-server-test-suites")
include(":ktor-server:ktor-server-jetty")
include(":ktor-server:ktor-server-jetty:ktor-server-jetty-test-http2")
include(":ktor-server:ktor-server-jetty-jakarta")
include(":ktor-server:ktor-server-jetty-jakarta:ktor-server-jetty-test-http2-jakarta")
include(":ktor-server:ktor-server-servlet")
include(":ktor-server:ktor-server-servlet-jakarta")
include(":ktor-server:ktor-server-tomcat")
include(":ktor-server:ktor-server-tomcat-jakarta")
include(":ktor-server:ktor-server-netty")
include(":ktor-server:ktor-server-cio")
include(":ktor-client")
......@@ -40,15 +44,9 @@ include(":ktor-client:ktor-client-ios")
include(":ktor-client:ktor-client-darwin")
include(":ktor-client:ktor-client-darwin-legacy")
include(":ktor-client:ktor-client-winhttp")
if (JavaVersion.current() >= JavaVersion.VERSION_11) {
include(":ktor-client:ktor-client-java")
include(":ktor-client:ktor-client-jetty-jakarta")
include(":ktor-server:ktor-server-servlet-jakarta")
include(":ktor-server:ktor-server-jetty-jakarta")
include(":ktor-server:ktor-server-jetty-jakarta:ktor-server-jetty-test-http2-jakarta")
include(":ktor-server:ktor-server-tomcat-jakarta")
}
include(":ktor-client:ktor-client-java")
include(":ktor-client:ktor-client-jetty")
include(":ktor-client:ktor-client-jetty-jakarta")
include(":ktor-client:ktor-client-js")
include(":ktor-client:ktor-client-mock")
include(":ktor-client:ktor-client-okhttp")
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать