From c135e3761696634040b268f604aa806252996a52 Mon Sep 17 00:00:00 2001 From: Marcel Richter Date: Wed, 15 Nov 2023 02:42:42 +0100 Subject: [PATCH 1/7] Replace deprecated set method --- buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts b/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts index 111b19c..1828a89 100644 --- a/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts @@ -57,7 +57,7 @@ kotlin { detekt { ignoreFailures = false buildUponDefaultConfig = true - config = files("$rootDir/detekt.yml") + config.setFrom("$rootDir/detekt.yml") parallel = true } From 4081bf26a3b28ec668da6aca6c0ed1d025705633 Mon Sep 17 00:00:00 2001 From: Marcel Richter Date: Wed, 15 Nov 2023 02:43:49 +0100 Subject: [PATCH 2/7] Add some docs --- buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts b/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts index 1828a89..fe6ca97 100644 --- a/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts @@ -56,8 +56,16 @@ kotlin { detekt { ignoreFailures = false + + // Applies the config files on top of detekt's default config file. `false` by default. buildUponDefaultConfig = true + + // Define the detekt configuration(s) you want to use. + // Defaults to the default detekt configuration. config.setFrom("$rootDir/detekt.yml") + + // Builds the AST in parallel. Rules are always executed in parallel. + // Can lead to speedups in larger projects. `false` by default. parallel = true } From 1c0920e664d123137182f59b62bd808f8eec6994 Mon Sep 17 00:00:00 2001 From: Marcel Richter Date: Wed, 15 Nov 2023 02:46:44 +0100 Subject: [PATCH 3/7] Manage buildSrc JDK Version in libs.versions.toml --- buildSrc/build.gradle.kts | 31 +++++++++++++++++++++++++++++++ gradle/libs.versions.toml | 1 + 2 files changed, 32 insertions(+) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 7d9208d..6083721 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,3 +1,6 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion + val libs: VersionCatalog = extensions.getByType().named("libs") plugins { @@ -12,6 +15,34 @@ repositories { mavenCentral() } +kotlin { + jvmToolchain { + languageVersion.set( + JavaLanguageVersion.of(libs.findVersion("jdk").get().toString()) + ) + } + compilerOptions { + @Suppress("SpellCheckingInspection") + freeCompilerArgs.add("-Xjsr305=strict") + allWarningsAsErrors = false + jvmTarget.set(JvmTarget.valueOf("JVM_${libs.findVersion("jdk").get()}")) + languageVersion.set( + KotlinVersion.valueOf( + "KOTLIN_${ + libs.findVersion("kotlin").get().toString().substringBeforeLast(".").replace(".", "_") + }" + ) + ) + apiVersion.set( + KotlinVersion.valueOf( + "KOTLIN_${ + libs.findVersion("kotlin").get().toString().substringBeforeLast(".").replace(".", "_") + }" + ) + ) + } +} + dependencies { // buildSrc in combination with this plugin ensures that the version set here // will be set to the same for all other Kotlin dependencies / plugins in the project. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d7e20b7..49eb960 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,7 @@ kotlin-logging = "3.0.5" lorem = "2.2" j2html = "1.6.0" +jdk = "17" kotlin = "1.9.20" kotlinForDetekt = "1.9.10" springBoot = "3.1.5" From 87c5b9bc07d003adaa8da6365f24235e90e37364 Mon Sep 17 00:00:00 2001 From: Marcel Richter Date: Wed, 15 Nov 2023 02:49:11 +0100 Subject: [PATCH 4/7] Manage JDK Version in libs.versions.toml and activate TypeResolution --- .../main/kotlin/kotlin-conventions.gradle.kts | 78 ++++++++++--------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts b/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts index fe6ca97..c59d77b 100644 --- a/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts @@ -1,7 +1,8 @@ import de.mrclrchtr.education.gradle.constant.JDK_VERSION -import de.mrclrchtr.education.gradle.constant.KOTLIN_VERSION import io.gitlab.arturbosch.detekt.Detekt -import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion +import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { id("java-conventions") @@ -13,43 +14,33 @@ plugins { id("io.gitlab.arturbosch.detekt") } -val embeddedMajorAndMinorKotlinVersion = project.getKotlinPluginVersion().substringBeforeLast(".") -if (KOTLIN_VERSION != embeddedMajorAndMinorKotlinVersion) { - logger.warn( - "Constant 'KOTLIN_VERSION' ($KOTLIN_VERSION) differs from embedded Kotlin version in Gradle" + - " (${project.getKotlinPluginVersion()})!" + - " Constant 'KOTLIN_VERSION' should be ($embeddedMajorAndMinorKotlinVersion)." - ) -} - -tasks.compileKotlin { - logger.lifecycle("Configuring $name with version ${project.getKotlinPluginVersion()} in project ${project.name}") - kotlinOptions { - @Suppress("SpellCheckingInspection") - freeCompilerArgs = listOf("-Xjsr305=strict") - allWarningsAsErrors = true - jvmTarget = JDK_VERSION - languageVersion = KOTLIN_VERSION - apiVersion = KOTLIN_VERSION - } -} - -tasks.compileTestKotlin { - logger.lifecycle("Configuring $name with version ${project.getKotlinPluginVersion()} in project ${project.name}") - kotlinOptions { - @Suppress("SpellCheckingInspection") - freeCompilerArgs = listOf("-Xjsr305=strict") - allWarningsAsErrors = true - jvmTarget = JDK_VERSION - languageVersion = KOTLIN_VERSION - apiVersion = KOTLIN_VERSION - } -} +// Needs to exist before first usage of 'libs' +val libs = extensions.getByType().named("libs") kotlin { jvmToolchain { languageVersion.set( - JavaLanguageVersion.of(JDK_VERSION) + JavaLanguageVersion.of(libs.findVersion("jdk").get().toString()) + ) + } + compilerOptions { + @Suppress("SpellCheckingInspection") + freeCompilerArgs.add("-Xjsr305=strict") + allWarningsAsErrors = false + jvmTarget.set(JvmTarget.valueOf("JVM_${libs.findVersion("jdk").get()}")) + languageVersion.set( + KotlinVersion.valueOf( + "KOTLIN_${ + libs.findVersion("kotlin").get().toString().substringBeforeLast(".").replace(".", "_") + }" + ) + ) + apiVersion.set( + KotlinVersion.valueOf( + "KOTLIN_${ + libs.findVersion("kotlin").get().toString().substringBeforeLast(".").replace(".", "_") + }" + ) ) } } @@ -69,8 +60,6 @@ detekt { parallel = true } -val libs = extensions.getByType().named("libs") - dependencies { constraints { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") @@ -85,9 +74,22 @@ dependencies { add("detektPlugins", libs.findLibrary("detekt-formatting").get()) } +// Activate Type Resolution tasks.withType().configureEach { - // Target version of the generated JVM bytecode. It is used for type resolution. this.jvmTarget = JDK_VERSION + classpath.setFrom( + sourceSets.main.get().compileClasspath, + sourceSets.test.get().compileClasspath + ) +} + +// Activate Type Resolution +tasks.withType().configureEach { + this.jvmTarget = JDK_VERSION + classpath.setFrom( + sourceSets.main.get().compileClasspath, + sourceSets.test.get().compileClasspath + ) } afterEvaluate { From 132700ee98098a17802a991b5139d20ba81fb220 Mon Sep 17 00:00:00 2001 From: Marcel Richter Date: Wed, 15 Nov 2023 02:49:26 +0100 Subject: [PATCH 5/7] Update kotlinc.xml --- .idea/kotlinc.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 69e8615..e805548 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file From ec5cc933fe662689bd33dfcd84f2394ffdf2ee50 Mon Sep 17 00:00:00 2001 From: Marcel Richter Date: Wed, 15 Nov 2023 02:52:46 +0100 Subject: [PATCH 6/7] Fix Detekt TypeResolution Warning --- .../de/mrclrchtr/education/message/dashboard/MessageClient.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/message-dashboard/src/main/kotlin/de/mrclrchtr/education/message/dashboard/MessageClient.kt b/message-dashboard/src/main/kotlin/de/mrclrchtr/education/message/dashboard/MessageClient.kt index 861f341..fb70959 100644 --- a/message-dashboard/src/main/kotlin/de/mrclrchtr/education/message/dashboard/MessageClient.kt +++ b/message-dashboard/src/main/kotlin/de/mrclrchtr/education/message/dashboard/MessageClient.kt @@ -16,7 +16,7 @@ class MessageClient( @Value("\${mrclrchtr.message.factory.port}") val port: Int, ) { - private final var uriComponentsBuilder = UriComponentsBuilder.newInstance() + private final val uriComponentsBuilder = UriComponentsBuilder.newInstance() private val restTemplate = templateBuilder.rootUri( uriComponentsBuilder From 33e18b8c4ff7ea6d60786f7399384d35128d00a6 Mon Sep 17 00:00:00 2001 From: Marcel Richter Date: Wed, 15 Nov 2023 02:56:16 +0100 Subject: [PATCH 7/7] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 93dad20..8d06962 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,15 @@ individual buildSrc modules. This makes the build very modular and also very cle It has the following details: - Java 17 -- Gradle 8.2.1 +- Gradle 8.4 - buildSrc - Kotlin DSL - Version Catalog (libs.versions.toml) - Gradle Build Scan enabled in CI (Attention! Terms of Service are accepted by the environment variable `BUILD_SCAN_TOS_ACCEPTED` and the scan enabled by the environment variable `CI`) -- Kotlin 1.8.10 -- Spring Boot 3.0.3 -- Dokka 1.7.20 +- Kotlin 1.9.20 +- Spring Boot 3.1.5 +- Detekt 1.23.3 +- Dokka 1.9.10 - Spring Dependency-Management Additionally, I added a POC how Maven Publishing could work. In another project, I got it to work like this without