== Why is this an issue? Custom tasks and plugins should be moved from the build script to the `buildSrc` directory to encapsulate custom build logic and separate it against its application in the build script. This helps to keep the build script clean and easy to understand. === What is the potential impact? ==== Readability and Understanding This change makes the build script easier to read and understand due to encapsulation and separation of concerns. == How to fix it Move custom tasks, plugins, and configuration extensions from your `./build.gradle.kts` file to source files in `./buildSrc/src/main/kotlin`. You should apply package names and folders like for any other source code. Please see the attached links for details about how to write custom plugins and the proper use of the `./buildSrc` directory. === Code examples ==== Noncompliant code example **./build.gradle.kts** [source,kotlin,diff-id=1,diff-type=noncompliant] ---- open class MyCustomTask : DefaultTask() { // ... } tasks.register("myCustom") open class MyCustomExtension { var flag: Boolean = false } extensions.create("myCustomExtension") val myCustomExtension: MyCustomExtension by project myCustomExtension.flag = true ---- ==== Compliant solution **./buildSrc/src/main/kotlin/mypackage/MyCustomTask.kt** [source,kotlin,diff-id=1,diff-type=compliant] ---- package mypackage import org.gradle.api.DefaultTask open class MyCustomTask : DefaultTask() { // ... } ---- **./buildSrc/src/main/kotlin/mypackage/MyCustomExtension.kt** [source,kotlin,diff-id=1,diff-type=compliant] ---- package mypackage open class MyCustomExtension { var flag: Boolean = false } ---- **./build.gradle.kts** [source,kotlin,diff-id=1,diff-type=compliant] ---- import mypackage.MyCustomExtension import mypackage.MyCustomTask tasks.register("myCustom") extensions.create("myCustomExtension") val myCustomExtension: MyCustomExtension by project myCustomExtension.flag = true ---- == Resources === Documentation * https://docs.gradle.org/current/userguide/organizing_gradle_projects.html#sec:build_sources[Gradle Documentation - Use "buildSrc" to abstract imperative logic] * https://docs.gradle.org/current/userguide/custom_tasks.html#custom_tasks[Gradle Documentation - Developing Custom Gradle Task Types]