【发布时间】:2019-07-10 13:36:54
【问题描述】:
我正在创作一个 Gradle 插件。
我正在编写这样的代码,调用 Groovy/Java Gradle API:
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!"
)
}
}
}
}
在 build.gradle.kts 中启用 kotlin-dsl 插件后,我在原始未更改的 HelloPlugin.kt 中遇到编译器错误:
e: /home/example/Documents/gradle-com.example.hello-plugin/src/main/kotlin/com/example/HelloPlugin.kt: (11, 27): 不能调用以下函数提供的参数:
public abstract fun register(p0: String, p1: Class, vararg p2: Any!): TaskProvider 定义在 org.gradle.api.tasks.TaskContainer
public abstract fun register(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): 以下函数都不能使用提供的参数调用:
public abstract fun register(p0: String, p1: Class, vararg p2: Any!): TaskProvider 定义在 org.gradle.api.tasks.TaskContainer
public abstract fun register(p0: String, p1: Class, p2: Action):在org.gradle.api.tasks.TaskContainer中定义的TaskProvider
完整的可运行项目位于: https://github.com/AlainODea/gradle-com.example.hello-plugin
如何在插件中使用 Gradle Kotlin DSL?
【问题讨论】:
标签: kotlin gradle-plugin