面试题答案
一键面试- 关键步骤:
- 在Gradle插件的
build.gradle.kts
文件中配置依赖。 - 定义任务B及其初始化操作。
- 定义任务A,并设置任务A依赖于任务B。
- 在Gradle插件的
- 代码实现:
- 配置依赖:
在
build.gradle.kts
中添加Kotlin DSL和Gradle API依赖:
- 配置依赖:
在
plugins {
`kotlin-dsl`
}
repositories {
gradlePluginPortal()
mavenCentral()
}
dependencies {
implementation(gradleApi())
implementation(kotlin("stdlib-jdk8"))
}
- 定义任务B及其初始化操作:
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
open class TaskB : DefaultTask() {
init {
// 初始化操作
println("TaskB初始化操作")
}
@TaskAction
fun executeTaskB() {
println("执行TaskB")
}
}
- 定义任务A并设置依赖:
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
open class TaskA : DefaultTask() {
init {
// 任务A的初始化操作(如果有)
println("TaskA初始化操作")
}
@TaskAction
fun executeTaskA() {
println("执行TaskA")
}
}
// 在插件的主类中设置任务依赖
class MyPlugin : Plugin<Project> {
override fun apply(target: Project) {
val taskB = target.tasks.register("taskB", TaskB::class.java)
val taskA = target.tasks.register("taskA", TaskA::class.java) {
dependsOn(taskB)
}
}
}
在上述代码中,首先在build.gradle.kts
配置了Gradle插件开发所需的依赖。然后定义了TaskB
类,在其init
块中进行初始化操作,@TaskAction
注解标记的方法为任务执行的实际逻辑。TaskA
类同理,最后在插件主类MyPlugin
中,通过dependsOn
方法设置taskA
依赖于taskB
,从而实现了任务依赖和生命周期管理。