我还是 Gradle 的新手,我正在努力理解插件任务的任务配置是如何工作的。考虑来自 Java 插件的 Jar
任务:如果我覆盖了 doFirst
和 doLast
方法,为什么插件的原始操作集仍然发生,但是如果我更改了 description
Jar
任务然后使用我的新描述?我的构建脚本的内容是:
plugins{
id 'java'
}
jar {
description "The new description"
doFirst {
println "this happened first"
}
doLast {
println "This happened last"
}
}
我问这个更多是为了巩固我对 gradle 工作原理的理解,而不一定是因为我还想这样做。
答案 0 :(得分:0)
Gradle 脚本只是在用 Java 编写的 Gradle API 上运行的 Groovy 脚本(带有一些附加功能)。您可以查看 API 文档,您的大部分问题都会得到解决:
<块引用>考虑来自 Java 插件的 Jar
任务
让我们学究一下:Java 插件中没有 Jar
任务,只有 jar
类型的 Jar
任务。在此上下文中区分任务类型和任务实例非常重要。现在让我们查看 Gradle 中 Jar
任务类型的文档。如您所见,它继承自 DefaultTask
类型。 DefaultTask
定义了 Gradle 任务通用的所有属性和方法:
doFirst(Closure action)
- 将给定的闭包添加到此任务的开头
行动清单。
doLast(Closure action)
- 将给定的闭包添加到此任务的操作列表的末尾。
如您所见,无论何时使用 doFirst
或 doLast
,它只会将任务操作附加(或前置)到现有任务操作列表中,不会覆盖任何内容。
感谢 Groovy,使用 description
为属性 =
赋值实际上会调用方法 setDescription
:
setDescription(String description)
- 设置此任务的描述。
这是 Java 世界中已知的经典属性设置器。它将简单地设置新值,而旧值将被覆盖。