== Why is this an issue? Using the Kotlin Gradle DSL, a task can be defined in several ways: * `tasks.create(...)` will eagerly configure the task, regardless of whether it is required. * `tasks.register(...)` lazily configures the task only when it is required. This happens when it is located using query methods such as `TaskCollection.getByName(java.lang.String)`, when it is added to the task graph for execution, or when `Provider.get()` is called on the return value of this method. It is generally more efficient to use `tasks.register(...)` instead of `tasks.create(...)` as the task will not be configured if it is not needed. == How to fix it Replace `tasks.create(...)` with `tasks.register(...)`. === Code examples ==== Noncompliant code example [source,kotlin,diff-id=1,diff-type=noncompliant] ---- tasks.create("myTask") { group = JavaBasePlugin.DOCUMENTATION_GROUP description = "My task." // other configuration logic doLast { // ... } } ---- ==== Compliant solution [source,kotlin,diff-id=1,diff-type=compliant] ---- tasks.register("myTask") { group = JavaBasePlugin.DOCUMENTATION_GROUP description = "My task." // other configuration logic doLast { // ... } } ---- == Resources === Documentation * https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskContainer.html[org.gradle.api.tasks.TaskContainer] === Standards * https://docs.gradle.org/current/userguide/task_configuration_avoidance.html[Task configuration avoidance] * https://www.youtube.com/watch?v=LvuVboGNVoE&list=PL0UJI1nZ56yAHv9H9kZA6vat4N1kSRGis&index=10[Configuration avoidance (Gradle best practice tip #8)]