Я создаю плагин Gradle.
Я пишу такой код, вызывающий API Groovy / Java Gradle:
package com.example
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.Exec
class HelloPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.afterEvaluate {
project.tasks.register("hello", Exec::class.java) { task ->
task.commandLine = listOf(
"echo",
"Hello, world!"
)
}
}
}
}
Я бы предпочел написать такой код:
package com.example
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.Exec
class HelloPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.afterEvaluate {
project.tasks.register<Exec>("hello") { task ->
task.commandLine = listOf(
"echo",
"Hello, world!"
)
}
}
}
}
После включения плагина kotlin-dsl в build.gradle.kts Я получаю ошибки компилятора в исходном неизменном HelloPlugin.kt :
e: /home/example/Documents/gradle-com.example.hello-plugin/src/main/kotlin/com/example/HelloPlugin.kt: (11, 27): нетследующие аргументы могут быть вызваны с предоставленными аргументами:
открытый абстрактный забавный регистр (p0: String, p1: Class, vararg p2: Any!): TaskProvider, определенный в org.gradle.api.tasks.TaskContainer
publicрегистр абстрактного веселья (p0: String, p1: Class, p2: Action): TaskProvider, определенный в org.gradle.api.tasks.TaskContainer
e: /home/example/Documents/gradle-com.example.hello-plugin/src/main/kotlin/com/example/HelloPlugin.kt: (12, 22): неразрешенная ссылка: commandLine
e: / home / example / Documents / gradle-com.example.hello-plugin / src / main / kotlin / com / verafin / aws / lambda / AbstractLambdaPlugin.kt: (76, 53): ни одна из следующих функций не может быть вызвана с предоставленными аргументами:
открытый регистр абстрактного веселья (p0: String, p1: Class, vararg p2: Any!): TaskProvider определен в org.gradle.api.tasks.TaskContainer
открытый регистр абстрактного веселья (p0: String, p1: Class,p2: Action): TaskProvider определен в org.gradle.api.tasks.TaskContainer
Полный исполняемый проект находится по адресу: https://github.com/AlainODea/gradle-com.example.hello-plugin
Как использовать Gradle Kotlin DSL внутриплагин?