Skip to content
  • Intermediate

Gradle

ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)
import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture
import me.tbsten.katachi.dsl.gradle.gradle
val projectArchitecture = architecture {
gradle() // Declares gradle.kts, the Gradle wrapper, and the like with documented = false
}

The samples declare it with the same single line (GradleGroup.kt in sample/jvm).

gradle() does not declare included builds such as build-logic, nor buildSrc. Declare their build scripts and convention plugins yourself.

ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)
import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture
import me.tbsten.katachi.dsl.gradle.gradle
import me.tbsten.katachi.dsl.kotlin.ktFile
import me.tbsten.katachi.dsl.kotlin.ktsFile
import me.tbsten.katachi.dsl.template
const val buildConventionDir = "build-logic" // Use "buildSrc" instead if you use buildSrc
const val conventionSourceDir = "$buildConventionDir/src/main/kotlin"
val projectArchitecture = architecture {
gradle()
"Build".group {
documented = false
"BuildScript" {
summary = "The build scripts of the included build / buildSrc itself"
layout {
buildConventionDir {
"build.gradle".ktsFile()
"settings.gradle".ktsFile().optional() // buildSrc may go without one
}
}
}
"ConventionPluginScript" {
summary = "Convention plugin scripts that each module applies with plugins { id(\"...\") }"
layout {
conventionSourceDir {
"${capture("name")}.gradle".ktsFile()
.template {
"""
plugins {
kotlin("jvm")
}
""".trimIndent()
}
}
}
// ./gradlew katachiTemplate --arg template=Build.ConventionPluginScript --arg name=kotlin-library
}
"ConventionPluginSource" {
summary = "Helper Kotlin classes used by the convention plugin scripts"
layout {
conventionSourceDir {
"**" / "*".ktFile() // also allows classes in packages
}
}
}
}
}