# Gradle







```kt title="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](https://github.com/TBSten/katachi/blob/main/sample/jvm/architecture-test/src/test/kotlin/com/example/groups/GradleGroup.kt)).

## When you use a composite build / buildSrc

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

```kt title="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
                }
            }
        }
    }
}
```

<SnippetIsStartingPoint />