From 1f48d41a3d8328ae27beb94d722405a5cdaf1ab9 Mon Sep 17 00:00:00 2001 From: David Hiendl Date: Tue, 20 May 2025 12:10:26 +0200 Subject: [PATCH] add default buildscript template for kotlin projects to simplify project setup --- gradle/BuildscriptKotlinDefaults.gradle | 82 +++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 gradle/BuildscriptKotlinDefaults.gradle diff --git a/gradle/BuildscriptKotlinDefaults.gradle b/gradle/BuildscriptKotlinDefaults.gradle new file mode 100644 index 0000000..fd02055 --- /dev/null +++ b/gradle/BuildscriptKotlinDefaults.gradle @@ -0,0 +1,82 @@ +buildscript { + ext { + javaVersion = "23" // language version + jdkVersion = "23" // toolchain jdk version + kotlinVersion = "2.1.20" // https://kotlinlang.org/docs/releases.html#release-details + gradlewVersion = "8.12.1" // https://gradle.org/releases/ + + giteaUrl = System.getenv("GITEA_URL") ?: "https://gitea.dhswt.de" + } + + repositories { + mavenCentral() + } + + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" + } +} + +// configure defaults for gradle version +wrapper { + gradleVersion = "$gradlewVersion" + distributionType = Wrapper.DistributionType.ALL +} + +// append jdk version to gradle properties for use by CI environments +task writeCIGradleAndJdkVersionInfo(type: WriteProperties, group: "build setup") { + File ciPropsFile = new File(rootProject.projectDir, "gradle/ci.properties") + destinationFile = ciPropsFile + + def props = new Properties() + if(ciPropsFile.exists()) { + ciPropsFile.withInputStream { props.load(it) } + } + + props.setProperty("java_version", javaVersion) + props.setProperty("jdk_version", jdkVersion) + props.setProperty("kotlin_version", kotlinVersion) + props.setProperty("gradlew_version", gradlewVersion) + props.setProperty("gitea_url", giteaUrl) + + properties(props) +} + +// always run after wrapper task +wrapper.finalizedBy writeCIGradleAndJdkVersionInfo + +// use more compact source set directories without nesting for simple or mono-language projects +ext.useCompactKotlinSourceSets = { org.gradle.api.Project target -> + target.sourceSets { + main.java.srcDirs = [] + main.resources.srcDirs = ['resources'] + main.kotlin.srcDirs = ['src'] + test.java.srcDirs = [] + test.resources.srcDirs = ['resources', 'test-resources'] + test.kotlin.srcDirs = ['test'] + } +} + +// configure defaults for java and jdk versions based on provided variables and enable intellij idea integration +ext.configureDefaultsIdeaKotlinJava = { org.gradle.api.Project target -> + idea { + module { + downloadJavadoc = true + downloadSources = true + } + } + kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.valueOf("JVM_${javaVersion}")) + } + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(jdkVersion)) + } + } + java { + sourceCompatibility = JavaVersion.toVersion(javaVersion) + targetCompatibility = JavaVersion.toVersion(javaVersion) + withJavadocJar() + withSourcesJar() + } +}