Gradle:任务配置方法之间有什么区别吗

Gradle:任务配置方法之间有什么区别吗,gradle,groovy,task,Gradle,Groovy,Task,下面两段代码之间有什么区别吗 任务的快速初始化可能有一些不同吗 tasks.bootJar { archiveFileName = "some-name" } 及 它们实际上是相同的,只是语法不同。两者都会导致任务实现或初始化。您可以通过简单地运行调试输出来确认这一点:/gradlew-d 您将看到以下记录行: [DEBUG][org.gradle.internal.operations.DefaultBuildOperationRunner]生成操作“实现任务:b

下面两段代码之间有什么区别吗
任务的快速初始化可能有一些不同吗

tasks.bootJar {
    archiveFileName = "some-name"
}


它们实际上是相同的,只是语法不同。两者都会导致任务实现或初始化。您可以通过简单地运行调试输出来确认这一点:
/gradlew-d

您将看到以下记录行:

[DEBUG][org.gradle.internal.operations.DefaultBuildOperationRunner]生成操作“实现任务:bootJar”已启动

对于Groovy DSL,Gradle团队利用Groovy语言提供的功能,动态地提供任务、扩展、属性和更多“神奇的”可用性

所以对于这个例子:

tasks.bootJar {
    archiveFileName = "some-name"
}
任务
的类型为。如果要检查
TaskContainer
的所有可用方法和属性,您将看到
bootJar
不是其中之一。因此Gradle钩住Groovy元编程来搜索名为
bootJar
的东西。由于它位于
TaskContainer
类型上,因此可以假定
bootJar
是一个任务

因此,如果要对DSL进行脱胶,第一个示例实际上是:

tasks.getByName("bootJar") {

}
现在来看第二个例子:

bootJar {
    archiveFileName = "some-code"
}
Gradle生成文件中的默认作用域或
。同样,就像前面一样,如果您要检查所有可用的方法和属性,您将不会看到
bootJar

Groovy的“魔力”在这里发挥作用,但这一次,Gradle几乎会搜索(我的理解)任何地方,因为
项目中有更多可用的功能

project.extensions.named("bootJar") // exists?
project.hasProperty("bootJar") // exists?
project.tasks.getByName("bootJar") // found it!

总之,两者之间没有区别,因为两者都导致实现
bootJar
任务。尽可能使用以下工具,以提高Gradle构建的效率:

import org.springframework.boot.gradle.tasks.bundling.BootJar

tasks.named("bootJar", BootJar) {
    
}

它们实际上是相同的,只是语法不同。两者都会导致任务实现或初始化。您可以通过简单地运行调试输出来确认这一点:
/gradlew-d

您将看到以下记录行:

[DEBUG][org.gradle.internal.operations.DefaultBuildOperationRunner]生成操作“实现任务:bootJar”已启动

对于Groovy DSL,Gradle团队利用Groovy语言提供的功能,动态地提供任务、扩展、属性和更多“神奇的”可用性

所以对于这个例子:

tasks.bootJar {
    archiveFileName = "some-name"
}
任务
的类型为。如果要检查
TaskContainer
的所有可用方法和属性,您将看到
bootJar
不是其中之一。因此Gradle钩住Groovy元编程来搜索名为
bootJar
的东西。由于它位于
TaskContainer
类型上,因此可以假定
bootJar
是一个任务

因此,如果要对DSL进行脱胶,第一个示例实际上是:

tasks.getByName("bootJar") {

}
现在来看第二个例子:

bootJar {
    archiveFileName = "some-code"
}
Gradle生成文件中的默认作用域或
。同样,就像前面一样,如果您要检查所有可用的方法和属性,您将不会看到
bootJar

Groovy的“魔力”在这里发挥作用,但这一次,Gradle几乎会搜索(我的理解)任何地方,因为
项目中有更多可用的功能

project.extensions.named("bootJar") // exists?
project.hasProperty("bootJar") // exists?
project.tasks.getByName("bootJar") // found it!

总之,两者之间没有区别,因为两者都导致实现
bootJar
任务。尽可能使用以下工具,以提高Gradle构建的效率:

import org.springframework.boot.gradle.tasks.bundling.BootJar

tasks.named("bootJar", BootJar) {
    
}