Make Kotlin compatible with Gradle 9.0 EAP
diff --git a/analysis/analysis-api-fir/build.gradle.kts b/analysis/analysis-api-fir/build.gradle.kts
index a7050dc..9bd73a1 100644
--- a/analysis/analysis-api-fir/build.gradle.kts
+++ b/analysis/analysis-api-fir/build.gradle.kts
@@ -110,7 +110,7 @@
     workingDir = rootDir
     classpath = generatorClasspath
     mainClass.set("org.jetbrains.kotlin.analysis.api.fir.generator.MainKt")
-    systemProperties["line.separator"] = "\n"
+    systemProperty("line.separator", "\n")
 }
 
 val compileKotlin by tasks
diff --git a/build.gradle.kts b/build.gradle.kts
index 8565709..6247c7b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -752,7 +752,7 @@
     }
 
     register<Delete>("cleanupArtifacts") {
-        delete = setOf(artifactsDir)
+        targetFiles.setFrom(artifactsDir)
     }
 
     fun aggregateLibsTask(name: String, projectTask: String, projects: List<String>) =
@@ -1070,7 +1070,7 @@
     register<Exec>("mvnInstall") {
         group = "publishing"
         workingDir = rootProject.projectDir.resolve("libraries")
-        commandLine = getMvnwCmd() + listOf("clean", "install", "-DskipTests")
+        commandLine(getMvnwCmd() + listOf("clean", "install", "-DskipTests"))
         doFirst {
             environment("JDK_1_8", getToolchainJdkHomeFor(JdkMajorVersion.JDK_1_8).get())
         }
@@ -1078,11 +1078,13 @@
     register<Exec>("mvnPublish") {
         group = "publishing"
         workingDir = rootProject.projectDir.resolve("libraries")
-        commandLine = getMvnwCmd() + listOf(
-            "clean", "deploy", "--activate-profiles=noTest",
-            "-Dinvoker.skip=true", "-DskipTests",
-            "-Ddeploy-snapshot-repo=local",
-            "-Ddeploy-snapshot-url=file://${rootProject.projectDir.resolve("build/repo")}"
+        commandLine(
+            getMvnwCmd() + listOf(
+                "clean", "deploy", "--activate-profiles=noTest",
+                "-Dinvoker.skip=true", "-DskipTests",
+                "-Ddeploy-snapshot-repo=local",
+                "-Ddeploy-snapshot-url=file://${rootProject.projectDir.resolve("build/repo")}"
+            )
         )
         doFirst {
             environment("JDK_1_8", getToolchainJdkHomeFor(JdkMajorVersion.JDK_1_8).get())
@@ -1098,7 +1100,7 @@
         }
         group = "publishing"
         workingDir = rootProject.projectDir.resolve("libraries")
-        commandLine = getMvnwCmd() + listOf("clean", "install", "-DskipTests", "-DexcludeTestModules=true")
+        commandLine(getMvnwCmd() + listOf("clean", "install", "-DskipTests", "-DexcludeTestModules=true"))
         val jdk8Home = getToolchainJdkHomeFor(JdkMajorVersion.JDK_1_8)
         doFirst {
             environment("JDK_1_8", jdk8Home.get())
diff --git a/gradle.properties b/gradle.properties
index 5bedac2..5652db1 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -64,6 +64,7 @@
 # TODO: add this flag in a granular way to the modules that don't need stdlib?
 kotlin.stdlib.default.dependency=false
 kotlin.js.stdlib.dom.api.included=false
+org.gradle.dependency.verification=off
 
 # Suppress warnings about using deprecated and unstable plugins in kotlin-stdlib
 kotlin.internal.mpp12x.deprecation.suppress=true
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index eb1a55b..e34111e 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,7 +1,7 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+#distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6
+distributionUrl=https\://services.gradle.org/distributions-snapshots/gradle-9.0-branch-asodja_upgrade_java_exec_spec-20250120174019+0000-bin.zip
 networkTimeout=10000
 validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
diff --git a/libraries/kotlin.test/build.gradle.kts b/libraries/kotlin.test/build.gradle.kts
index 3e6662c..3505389 100644
--- a/libraries/kotlin.test/build.gradle.kts
+++ b/libraries/kotlin.test/build.gradle.kts
@@ -304,11 +304,13 @@
             register("jvm${framework}${if (excludeAsserterContributor) "NoAsserter" else ""}Test", Test::class) {
                 group = "verification"
                 val testCompilation = kotlin.jvm().compilations["${framework}Test"]
-                classpath = testCompilation.runtimeDependencyFiles + testCompilation.output.allOutputs
+                val classpathX = testCompilation.runtimeDependencyFiles + testCompilation.output.allOutputs
                 if (excludeAsserterContributor) {
                     val mainCompilation = kotlin.jvm().compilations["$framework"]
-                    classpath -= mainCompilation.output.allOutputs
+                    classpath = classpathX - mainCompilation.output.allOutputs
                     filter.excludePatterns += "*ContributorTest"
+                } else {
+                    classpath = classpathX
                 }
                 testClassesDirs = testCompilation.output.classesDirs
                 when (framework) {
@@ -573,11 +575,17 @@
 tasks.withType<GenerateModuleMetadata> {
     val publication = publication.get() as MavenPublication
     // alter capabilities of leaf JVM framework artifacts published by "available-at" coordinates
-    if (jvmTestFrameworks.map { it.lowercase() }.any { publication.artifactId.endsWith(it) }) {
+    if (jvmTestFrameworks.map { it.lowercase() }.any { publication.artifactId.get().endsWith(it) }) {
         fun capability(group: String, name: String, version: String) =
             mapOf("group" to group, "name" to name, "version" to version)
 
-        val defaultCapability = publication.let { capability(it.groupId, it.artifactId, it.version) }
+        val defaultCapability = publication.let {
+            capability(
+                it.groupId.get(),
+                it.artifactId.get(),
+                it.version.get()
+            )
+        }
         val implCapability = implCapability.split(":").let { (g, n, v) -> capability(g, n, v) }
         val capabilities = listOf(defaultCapability, implCapability)
 
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts
index 06007e6..65b09f3 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts
@@ -427,7 +427,7 @@
 tasks.withType<Test>().configureEach {
     // Disable KONAN_DATA_DIR env variable for all integration tests
     // because we are using `konan.data.dir` gradle property instead
-    environment.remove("KONAN_DATA_DIR")
+    environment = environment.get().filterKeys { it != "KONAN_DATA_DIR" }
 
     val noTestProperty = project.providers.gradleProperty("noTest")
     onlyIf { !noTestProperty.isPresent }
diff --git a/libraries/tools/kotlin-privacy-manifests-plugin/build.gradle.kts b/libraries/tools/kotlin-privacy-manifests-plugin/build.gradle.kts
index cf0d1e0..1a422a4 100644
--- a/libraries/tools/kotlin-privacy-manifests-plugin/build.gradle.kts
+++ b/libraries/tools/kotlin-privacy-manifests-plugin/build.gradle.kts
@@ -31,7 +31,7 @@
     configurations[functionalTest.implementationConfigurationName].extendsFrom(configurations.testImplementation.get())
 
     val cleanFunctionalTest = tasks.register<Delete>("cleanFunctionalTest") {
-        setDelete(layout.buildDirectory.dir("functionalTest"))
+        targetFiles.from(layout.buildDirectory.dir("functionalTest"))
     }
 
     tasks.register<Test>("functionalTest") {
diff --git a/native/objcexport-header-generator/build.gradle.kts b/native/objcexport-header-generator/build.gradle.kts
index d56156e..e67e26d 100644
--- a/native/objcexport-header-generator/build.gradle.kts
+++ b/native/objcexport-header-generator/build.gradle.kts
@@ -47,11 +47,11 @@
 }
 
 objCExportHeaderGeneratorTest("testK1", testDisplayNameTag = "K1") {
-    classpath += k1TestRuntimeClasspath
+    classpath.from(k1TestRuntimeClasspath)
 }
 
 objCExportHeaderGeneratorTest("testAnalysisApi", testDisplayNameTag = "AA") {
-    classpath += analysisApiRuntimeClasspath
+    classpath.from(analysisApiRuntimeClasspath)
 }
 
 tasks.check.configure {
diff --git a/plugins/allopen/allopen.embeddable/build.gradle.kts b/plugins/allopen/allopen.embeddable/build.gradle.kts
index 7349446..31e0807 100644
--- a/plugins/allopen/allopen.embeddable/build.gradle.kts
+++ b/plugins/allopen/allopen.embeddable/build.gradle.kts
@@ -7,7 +7,7 @@
 }
 
 publish {
-    artifactId = artifactId.replace(".", "-")
+    artifactId = artifactId.get().replace(".", "-")
 }
 
 runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
diff --git a/plugins/assign-plugin/assign-plugin.embeddable/build.gradle.kts b/plugins/assign-plugin/assign-plugin.embeddable/build.gradle.kts
index 7df04bd..bae52a72 100644
--- a/plugins/assign-plugin/assign-plugin.embeddable/build.gradle.kts
+++ b/plugins/assign-plugin/assign-plugin.embeddable/build.gradle.kts
@@ -10,7 +10,7 @@
 }
 
 publish {
-    artifactId = artifactId.replace(".", "-")
+    artifactId = artifactId.get().replace(".", "-")
 }
 
 runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
diff --git a/plugins/kotlinx-serialization/build.gradle.kts b/plugins/kotlinx-serialization/build.gradle.kts
index fa8b46a..edc346c 100644
--- a/plugins/kotlinx-serialization/build.gradle.kts
+++ b/plugins/kotlinx-serialization/build.gradle.kts
@@ -80,7 +80,7 @@
 optInToExperimentalCompilerApi()
 
 publish {
-    artifactId = artifactId.replace("kotlinx-", "kotlin-")
+    artifactId = artifactId.get().replace("kotlinx-", "kotlin-")
 }
 
 val archiveName = "kotlin-serialization-compiler-plugin"
diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.embeddable/build.gradle.kts b/plugins/kotlinx-serialization/kotlinx-serialization.embeddable/build.gradle.kts
index 5615e8c..1c8e9f9 100644
--- a/plugins/kotlinx-serialization/kotlinx-serialization.embeddable/build.gradle.kts
+++ b/plugins/kotlinx-serialization/kotlinx-serialization.embeddable/build.gradle.kts
@@ -7,7 +7,7 @@
 }
 
 publish {
-    artifactId = artifactId.replace(".", "-").replace("kotlinx-", "kotlin-")
+    artifactId = artifactId.get().replace(".", "-").replace("kotlinx-", "kotlin-")
 }
 
 runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
diff --git a/plugins/lombok/lombok.embeddable/build.gradle.kts b/plugins/lombok/lombok.embeddable/build.gradle.kts
index 3312dba..3adc2cc 100644
--- a/plugins/lombok/lombok.embeddable/build.gradle.kts
+++ b/plugins/lombok/lombok.embeddable/build.gradle.kts
@@ -7,7 +7,7 @@
 }
 
 publish {
-    artifactId = artifactId.replace(".", "-")
+    artifactId = artifactId.get().replace(".", "-")
 }
 runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
 sourcesJarWithSourcesFromEmbedded(
diff --git a/plugins/noarg/noarg.embeddable/build.gradle.kts b/plugins/noarg/noarg.embeddable/build.gradle.kts
index 9538b81..7e5513c 100644
--- a/plugins/noarg/noarg.embeddable/build.gradle.kts
+++ b/plugins/noarg/noarg.embeddable/build.gradle.kts
@@ -7,7 +7,7 @@
 }
 
 publish {
-    artifactId = artifactId.replace(".", "-")
+    artifactId = artifactId.get().replace(".", "-")
 }
 
 runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
diff --git a/plugins/power-assert/power-assert.embeddable/build.gradle.kts b/plugins/power-assert/power-assert.embeddable/build.gradle.kts
index b13aeca..7c00e5e 100644
--- a/plugins/power-assert/power-assert.embeddable/build.gradle.kts
+++ b/plugins/power-assert/power-assert.embeddable/build.gradle.kts
@@ -7,7 +7,7 @@
 }
 
 publish {
-    artifactId = artifactId.replace(".", "-")
+    artifactId = artifactId.get().replace(".", "-")
 }
 
 runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
diff --git a/plugins/sam-with-receiver/sam-with-receiver.embeddable/build.gradle.kts b/plugins/sam-with-receiver/sam-with-receiver.embeddable/build.gradle.kts
index e4279ac..d46a18e 100644
--- a/plugins/sam-with-receiver/sam-with-receiver.embeddable/build.gradle.kts
+++ b/plugins/sam-with-receiver/sam-with-receiver.embeddable/build.gradle.kts
@@ -7,7 +7,7 @@
 }
 
 publish {
-    artifactId = artifactId.replace(".", "-")
+    artifactId = artifactId.get().replace(".", "-")
 }
 
 runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
diff --git a/repo/gradle-build-conventions/asm-deprecating-transformer/src/main/kotlin/org/jetbrains/kotlin/build/asm/AsmDeprecationExtension.kt b/repo/gradle-build-conventions/asm-deprecating-transformer/src/main/kotlin/org/jetbrains/kotlin/build/asm/AsmDeprecationExtension.kt
index a22456b..d5ea860 100644
--- a/repo/gradle-build-conventions/asm-deprecating-transformer/src/main/kotlin/org/jetbrains/kotlin/build/asm/AsmDeprecationExtension.kt
+++ b/repo/gradle-build-conventions/asm-deprecating-transformer/src/main/kotlin/org/jetbrains/kotlin/build/asm/AsmDeprecationExtension.kt
@@ -76,7 +76,7 @@
                             classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES)
                             val newBytes = classWriter.toByteArray()
                             val newEntry = ZipEntry(path)
-                            if (!isPreserveFileTimestamps) {
+                            if (!preserveFileTimestamps.get()) {
                                 newEntry.time = CONSTANT_TIME_FOR_ZIP_ENTRIES
                             }
                             intermediateZipFile.putNextEntry(newEntry)
@@ -85,7 +85,7 @@
                         }
                     } else {
                         val newEntry = ZipEntry(if (isDirectory) "$path/" else path)
-                        if (!isPreserveFileTimestamps) {
+                        if (!preserveFileTimestamps.get()) {
                             newEntry.time = CONSTANT_TIME_FOR_ZIP_ENTRIES
                         }
                         intermediateZipFile.putNextEntry(newEntry)
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/CommonUtil.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/CommonUtil.kt
index 3212a56..c9173b0 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/CommonUtil.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/CommonUtil.kt
@@ -21,8 +21,6 @@
 
 inline fun <reified T : Task> Project.task(noinline configuration: T.() -> Unit) = tasks.registering(T::class, configuration)
 
-inline fun <reified T : Task> Project.eagerTask(noinline configuration: T.() -> Unit) = tasks.creating(T::class, configuration)
-
 fun Project.callGroovy(name: String, vararg args: Any?): Any? {
     return (property(name) as Closure<*>).call(*args)
 }
@@ -79,7 +77,7 @@
 
 fun Project.findJavaPluginExtension(): JavaPluginExtension? = extensions.findByType()
 
-fun JavaExec.pathRelativeToWorkingDir(file: File): String = file.relativeTo(workingDir).invariantSeparatorsPath
+fun JavaExec.pathRelativeToWorkingDir(file: File): String = file.relativeTo(workingDir.asFile.get()).invariantSeparatorsPath
 
 fun Task.singleOutputFile(layout: ProjectLayout): File = when (this) {
     is AbstractArchiveTask -> archiveFile.get().asFile
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/ComposeDependencies.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/ComposeDependencies.kt
index 910edcf..00dd71d 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/ComposeDependencies.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/ComposeDependencies.kt
@@ -3,6 +3,7 @@
 import org.gradle.api.artifacts.VersionCatalogsExtension
 import org.gradle.api.artifacts.dsl.RepositoryHandler
 import org.gradle.kotlin.dsl.maven
+import org.gradle.kotlin.dsl.assign
 import java.net.URI
 
 /*
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/GradleCommon.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/GradleCommon.kt
index b2ce24d..e305fde 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/GradleCommon.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/GradleCommon.kt
@@ -55,8 +55,8 @@
         val pluginDevelopment = extensions.findByType(GradlePluginDevelopmentExtension::class)
             ?: error("Plugin marker publication $name detected without the `java-gradle-plugin` plugin")
         pluginDevelopment.plugins
-            .find { pluginDeclaration -> "${pluginDeclaration.id}${PLUGIN_MARKER_SUFFIX}" == mavenPublication.artifactId }
-            ?: error("Cannot find plugin declaration for publication ${this.name} (${mavenPublication.groupId}:${mavenPublication.artifactId})")
+            .find { pluginDeclaration -> "${pluginDeclaration.id}${PLUGIN_MARKER_SUFFIX}" == mavenPublication.artifactId.get() }
+            ?: error("Cannot find plugin declaration for publication ${this.name} (${mavenPublication.groupId.get()}:${mavenPublication.artifactId.get()})")
     }
 }
 
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/JvmToolchain.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/JvmToolchain.kt
index 6bdf55d..5e5f088 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/JvmToolchain.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/JvmToolchain.kt
@@ -3,6 +3,7 @@
 import org.gradle.api.Project
 import org.gradle.api.plugins.JavaPluginExtension
 import org.gradle.api.provider.Provider
+import org.gradle.kotlin.dsl.assign
 import org.gradle.api.tasks.compile.JavaCompile
 import org.gradle.jvm.toolchain.*
 import org.gradle.kotlin.dsl.getByType
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/NoDebugJavaExec.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/NoDebugJavaExec.kt
index c51d24f..7afc14b 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/NoDebugJavaExec.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/NoDebugJavaExec.kt
@@ -13,7 +13,8 @@
     private fun String.isDebuggerArgument(): Boolean =
         startsWith("-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=")
 
-    override fun setJvmArgs(arguments: MutableList<String>?) {
-        super.setJvmArgs(arguments?.filterNot { it.isDebuggerArgument() })
-    }
+    // TODO: Make this work again
+//    override fun setJvmArgs(arguments: MutableList<String>?) {
+//        super.setJvmArgs(arguments?.filterNot { it.isDebuggerArgument() })
+//    }
 }
\ No newline at end of file
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/SmartJavaExec.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/SmartJavaExec.kt
index f99c2a1..81224d8 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/SmartJavaExec.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/SmartJavaExec.kt
@@ -1,6 +1,7 @@
 import org.gradle.api.Project
 import org.gradle.api.tasks.JavaExec
 import org.gradle.jvm.tasks.Jar
+import org.gradle.kotlin.dsl.assign
 import org.gradle.kotlin.dsl.creating
 import org.gradle.kotlin.dsl.task
 
@@ -47,5 +48,5 @@
 
     mainClass.set("-jar")
     classpath = project.files()
-    args = listOf(jarTask.outputs.files.singleFile.path) + args.orEmpty()
+    args = listOf(jarTask.outputs.files.singleFile.path) + args.get()
 }
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/localDependencies.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/localDependencies.kt
index e9a9dc9..b7955ce 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/localDependencies.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/localDependencies.kt
@@ -22,6 +22,7 @@
 import org.gradle.api.artifacts.dsl.RepositoryHandler
 import org.gradle.api.artifacts.repositories.IvyArtifactRepository
 import org.gradle.kotlin.dsl.extra
+import org.gradle.kotlin.dsl.assign
 import java.io.File
 
 private fun Project.kotlinBuildLocalDependenciesDir(): File =
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/nativeTest.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/nativeTest.kt
index c28ce3a..27e72ee 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/nativeTest.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/nativeTest.kt
@@ -5,6 +5,7 @@
 import org.gradle.api.tasks.Sync
 import org.gradle.api.tasks.TaskProvider
 import org.gradle.api.tasks.testing.Test
+import org.gradle.kotlin.dsl.assign
 import org.gradle.kotlin.dsl.environment
 import org.gradle.kotlin.dsl.project
 import org.jetbrains.kotlin.konan.target.HostManager
@@ -266,7 +267,7 @@
                 buildString {
                     appendLine("$path parallel test execution parameters:")
                     append("  Available CPU cores = $availableCpuCores")
-                    systemProperties.filterKeys { it.startsWith("junit.jupiter") }.toSortedMap().forEach { (key, value) ->
+                    systemProperties.get().filterKeys { it.startsWith("junit.jupiter") }.toSortedMap().forEach { (key, value) ->
                         append("\n  $key = $value")
                     }
                 }
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt
index e75d5ef..8683e56 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt
@@ -97,8 +97,8 @@
         project.extra.set(KotlinBuildPublishingPlugin.MAIN_PUBLICATION_NAME_PROPERTY, value)
     }
 
-private fun humanReadableName(name: String) =
-    name.split("-").joinToString(separator = " ") { it.capitalize(Locale.ROOT) }
+private fun humanReadableName(name: Provider<String>) =
+    name.map { it.split("-").joinToString(separator = " ") { it.capitalize(Locale.ROOT) } }
 
 fun MavenPublication.configureKotlinPomAttributes(
     project: Project,
@@ -116,9 +116,11 @@
     val publication = this
     pom {
         this.packaging = packaging
-        name.set(explicitName.orElse(humanReadableName(publication.artifactId)))
-        description.set(explicitDescription.orElse(project.description ?: humanReadableName(publication.artifactId)))
-        url.set("https://kotlinlang.org/")
+        name = explicitName.orElse(humanReadableName(publication.artifactId))
+        description = explicitDescription
+            .orElse(project.provider { project.description })
+            .orElse(humanReadableName(publication.artifactId))
+        url = "https://kotlinlang.org/"
         licenses {
             license {
                 name.set("The Apache License, Version 2.0")
@@ -181,7 +183,7 @@
                 )
 
                 setUrl(repoUrl)
-                if (url.scheme != "file" && username != null && password != null) {
+                if (url.get().scheme != "file" && username != null && password != null) {
                     credentials {
                         this.username = username
                         this.password = password
diff --git a/repo/gradle-build-conventions/generators/src/main/kotlin/generatorTasks.kt b/repo/gradle-build-conventions/generators/src/main/kotlin/generatorTasks.kt
index 2a461a4..073482b 100644
--- a/repo/gradle-build-conventions/generators/src/main/kotlin/generatorTasks.kt
+++ b/repo/gradle-build-conventions/generators/src/main/kotlin/generatorTasks.kt
@@ -71,7 +71,7 @@
         workingDir = rootDir
         classpath = generatorClasspath
         mainClass.set(generatorMainClass)
-        systemProperties["line.separator"] = "\n"
+        systemProperty("line.separator", "\n")
         args(argsProvider(generationRoot))
 
         @Suppress("NAME_SHADOWING")
diff --git a/repo/scripts/cache-redirector.settings.gradle.kts b/repo/scripts/cache-redirector.settings.gradle.kts
index 37d39c5..5770fa4 100644
--- a/repo/scripts/cache-redirector.settings.gradle.kts
+++ b/repo/scripts/cache-redirector.settings.gradle.kts
@@ -216,9 +216,9 @@
 
 fun RepositoryHandler.redirect() = configureEach {
     when (this) {
-        is MavenArtifactRepository -> url = url.maybeRedirect()
-        is IvyArtifactRepository -> @Suppress("SENSELESS_COMPARISON") if (url != null) {
-            url = url.maybeRedirect()
+        is MavenArtifactRepository -> url = url.get().maybeRedirect()
+        is IvyArtifactRepository -> if (url.isPresent()) {
+            url = url.get().maybeRedirect()
         }
     }
 }
@@ -286,11 +286,11 @@
 
 fun RepositoryHandler.findNonCachedRepositories(): List<String> {
     val mavenNonCachedRepos = filterIsInstance<MavenArtifactRepository>()
-        .filterNot { it.url.isCachedOrLocal() }
+        .filterNot { it.url.get().isCachedOrLocal() }
         .map { it.url.toString() }
 
     val ivyNonCachedRepos = filterIsInstance<IvyArtifactRepository>()
-        .filterNot { it.url.isCachedOrLocal() }
+        .filterNot { it.url.get().isCachedOrLocal() }
         .map { it.url.toString() }
 
     return mavenNonCachedRepos + ivyNonCachedRepos
diff --git a/wasm/wasm.debug.browsers/build.gradle.kts b/wasm/wasm.debug.browsers/build.gradle.kts
index 35c4d68..0fad31f 100644
--- a/wasm/wasm.debug.browsers/build.gradle.kts
+++ b/wasm/wasm.debug.browsers/build.gradle.kts
@@ -25,13 +25,13 @@
 val cleanBuild by tasks.registering(Delete::class) {
     group = "build"
 
-    delete = setOf("build")
+    targetFiles.setFrom(setOf("build"))
 }
 
 val cleanNpm by tasks.registering(Delete::class) {
     group = "build"
 
-    delete = setOf("node_modules")
+    targetFiles.setFrom(setOf("node_modules"))
 }
 
 val npmBuild by tasks.registering(NpxTask::class) {