コンテンツにスキップ
  • 中級者向け

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() // gradle.kts, gradle wrapper などが documented = false で宣言されます
}

サンプルでも同じ1行で宣言しています(sample/jvm の GradleGroup.kt)。

composite build / buildSrc を利用している場合

Section titled “composite build / buildSrc を利用している場合”

gradle() は build-logic などの included build と buildSrc を宣言しません。その中のビルドスクリプトと規約プラグインは、自分で宣言します。

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" // buildSrc を利用する場合は代わりに "buildSrc"
const val conventionSourceDir = "$buildConventionDir/src/main/kotlin"
val projectArchitecture = architecture {
gradle()
"Build".group {
documented = false
"BuildScript" {
summary = "included build / buildSrc 自身のビルドスクリプト"
layout {
buildConventionDir {
"build.gradle".ktsFile()
"settings.gradle".ktsFile().optional() // buildSrc では無くてもよい
}
}
}
"ConventionPluginScript" {
summary = "各モジュールが 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 = "規約プラグインのスクリプトから使う、ヘルパーの Kotlin クラス"
layout {
conventionSourceDir {
"**" / "*".ktFile() // パッケージを切ったクラスも許す
}
}
}
}
}