From fe752f839a82d56c73e25383ba6cdca75aa31685 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sat, 1 Jul 2023 03:39:59 +0530 Subject: [PATCH] feat(build): migrate to Gradle JVM Toolchains --- build-logic/build.gradle.kts | 15 +---------- .../claw/gradle/AndroidCommonPlugin.kt | 6 ----- .../claw/gradle/KotlinAndroidPlugin.kt | 6 ++++- .../claw/gradle/KotlinCommonPlugin.kt | 26 ++++++++----------- .../msfjarvis/claw/gradle/KotlinJvmPlugin.kt | 12 ++++++--- settings.gradle.kts | 1 + 6 files changed, 27 insertions(+), 39 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 358cc3e2..5420c52d 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -4,22 +4,9 @@ * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. */ -import org.gradle.api.JavaVersion -import org.gradle.api.tasks.compile.JavaCompile -import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - plugins { `kotlin-dsl` } -tasks.withType().configureEach { - sourceCompatibility = JavaVersion.VERSION_17.toString() - targetCompatibility = JavaVersion.VERSION_17.toString() -} - -tasks.withType().configureEach { - compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } -} +kotlin.jvmToolchain { languageVersion.set(JavaLanguageVersion.of(17)) } gradlePlugin { plugins { diff --git a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/AndroidCommonPlugin.kt b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/AndroidCommonPlugin.kt index bcb3aab4..ac1d0cd5 100644 --- a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/AndroidCommonPlugin.kt +++ b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/AndroidCommonPlugin.kt @@ -16,7 +16,6 @@ import com.android.build.api.variant.LibraryAndroidComponentsExtension import com.android.build.gradle.BaseExtension import dev.msfjarvis.claw.gradle.LintConfig.configureLint import org.gradle.android.AndroidCacheFixPlugin -import org.gradle.api.JavaVersion import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.VersionCatalogsExtension @@ -53,11 +52,6 @@ class AndroidCommonPlugin : Plugin { resources.excludes.add("**/META-INF/LGPL2.1") } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - testOptions { animationsDisabled = true unitTests.isReturnDefaultValues = true diff --git a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinAndroidPlugin.kt b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinAndroidPlugin.kt index 4b544876..14ed8346 100644 --- a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinAndroidPlugin.kt +++ b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinAndroidPlugin.kt @@ -1,14 +1,17 @@ /* - * Copyright © 2022 Harsh Shandilya. + * Copyright © 2022-2023 Harsh Shandilya. * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. */ package dev.msfjarvis.claw.gradle +import dev.msfjarvis.claw.gradle.KotlinCommonPlugin.Companion.JVM_TOOLCHAIN_ACTION import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.getByType +import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper @Suppress("Unused") @@ -19,5 +22,6 @@ class KotlinAndroidPlugin : Plugin { apply(KotlinAndroidPluginWrapper::class) apply(KotlinCommonPlugin::class) } + project.extensions.getByType().jvmToolchain(JVM_TOOLCHAIN_ACTION) } } diff --git a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinCommonPlugin.kt b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinCommonPlugin.kt index 9b1a2284..ead96e85 100644 --- a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinCommonPlugin.kt +++ b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinCommonPlugin.kt @@ -6,16 +6,16 @@ */ package dev.msfjarvis.claw.gradle -import org.gradle.api.JavaVersion +import org.gradle.api.Action import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.testing.Test import org.gradle.api.tasks.testing.logging.TestLogEvent +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.jvm.toolchain.JavaToolchainSpec import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion -import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @Suppress("Unused") class KotlinCommonPlugin : Plugin { @@ -27,18 +27,11 @@ class KotlinCommonPlugin : Plugin { LintConfig.configureSubProject(project) } project.tasks.run { - withType().configureEach { - sourceCompatibility = JavaVersion.VERSION_17.toString() - targetCompatibility = JavaVersion.VERSION_17.toString() - } - withType().configureEach { + withType().configureEach { compilerOptions { - allWarningsAsErrors.set( - project.providers.environmentVariable("GITHUB_WORKFLOW").isPresent - ) - jvmTarget.set(JvmTarget.JVM_17) + allWarningsAsErrors.set(true) freeCompilerArgs.addAll(ADDITIONAL_COMPILER_ARGS) - languageVersion.set(KotlinVersion.KOTLIN_1_7) + languageVersion.set(KotlinVersion.KOTLIN_1_8) } } withType().configureEach { @@ -49,10 +42,13 @@ class KotlinCommonPlugin : Plugin { } } - private companion object { + companion object { private val ADDITIONAL_COMPILER_ARGS = listOf( "-opt-in=kotlin.RequiresOptIn", ) + + val JVM_TOOLCHAIN_ACTION = + Action { languageVersion.set(JavaLanguageVersion.of(17)) } } } diff --git a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinJvmPlugin.kt b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinJvmPlugin.kt index d7fcaba8..af9a377a 100644 --- a/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinJvmPlugin.kt +++ b/build-logic/src/main/kotlin/dev/msfjarvis/claw/gradle/KotlinJvmPlugin.kt @@ -8,19 +8,25 @@ package dev.msfjarvis.claw.gradle import com.android.build.api.dsl.Lint import com.android.build.gradle.LintPlugin +import dev.msfjarvis.claw.gradle.KotlinCommonPlugin.Companion.JVM_TOOLCHAIN_ACTION import dev.msfjarvis.claw.gradle.LintConfig.configureLint import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.findByType +import org.gradle.kotlin.dsl.getByType +import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper @Suppress("Unused") class KotlinJvmPlugin : Plugin { override fun apply(project: Project) { - project.pluginManager.apply(KotlinPluginWrapper::class) - project.pluginManager.apply(LintPlugin::class) + project.pluginManager.run { + apply(KotlinPluginWrapper::class) + apply(LintPlugin::class) + apply(KotlinCommonPlugin::class) + } project.extensions.findByType()?.configureLint(project, isJVM = true) - project.pluginManager.apply(KotlinCommonPlugin::class) + project.extensions.getByType().jvmToolchain(JVM_TOOLCHAIN_ACTION) } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 49992510..50cff0af 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,6 +7,7 @@ @file:Suppress("UnstableApiUsage") pluginManagement { + plugins { id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" } repositories { exclusiveContent { forRepository { google() }