何时在Gradle任务中使用"<<"

IAm*_*aja 3 groovy gradle

有时我看到:

task hey << {
    println "Hello, Gradle!"
}
Run Code Online (Sandbox Code Playgroud)

其他时候我看到:

task hey {
    println "Hello, Gradle!"
}
Run Code Online (Sandbox Code Playgroud)

什么时候使用" <<",什么时候不使用(和为什么)?

Sea*_*lsh 8

<<是简写doLast.你问题中的任务并不等同.

这个任务:

task hey << {
    println "Hello, Gradle!"
}
Run Code Online (Sandbox Code Playgroud)

相当于这个任务:

task hey {
    doLast {
        println "Hello, Gradle!"
    }
}
Run Code Online (Sandbox Code Playgroud)

无论您是否正在运行该特定任务,每次执行构建脚本时,第二个示例中的代码都将执行.例如,如果您有以下任务然后运行gradle goodbye,您将看到"Hello,World!" 和"再见,世界!" 即使您只执行"再见"任务:

task hello {
    println "Hello, world!"
}

task goodbye {
    println "Goodbye, world!"
}
Run Code Online (Sandbox Code Playgroud)

结果:

$ gradle goodbye
Hello, world!
Goodbye, world!
:goodbye UP-TO-DATE
Run Code Online (Sandbox Code Playgroud)

但是,如果您更新了要使用的任务定义<<doLast(例如task hello << {}),则只能看到println您执行的任务.

Adam Murdoch描述了在这篇文章中执行任务中的代码的时间.我在这里引用了一些相关信息:

执行与任务相关的代码时,有两个不同的时间点:第一个是配置时间,即构建脚本执行时.我们的想法是,此时您需要配置任务,以便在其他时间点(即执行时间)执行正确的操作.执行时间是任务执行其实际工作的时间点,并且仅在选择执行任务以及执行其依赖项之后才会发生.

每个任务都有一系列操作,这些操作按任务执行时指定的顺序运行.动作只是一个闭包或Action实现.doFirst()方法将任务配置为在序列的开头添加操作.doLast()和<<方法将任务配置为在序列的末尾添加操作.