Gradle Copy 任务不适用于 doFirst / doLast



我有一个简单的复制任务,它成功地复制了文件,但没有执行为该任务配置的doFirst/doLast项。

这是代码(build.gradle(:

task x(type: Copy) {
copy {
from(projectDir) {
include 'build.gradle'
}
into(buildDir)
}
println "Configuring."
doFirst {
println "Inside doFirst."
}
doLast {
println "Inside doLast."
}
}

很简单:单个任务"x"将build.gradle脚本本身(项目文件夹中的唯一文件(复制到项目的构建文件夹中。

这里是执行,首先确保没有先前的输出,并显示执行后有输出:

c:jdevnewpaasgradlebug>rd /s /q build & gradle x & dir build
The system cannot find the file specified.
> Configure project :
Configuring.
BUILD SUCCESSFUL in 1s
Volume in drive C is Windows
Volume Serial Number is 22A1-4AC1
Directory of c:jdevnewpaasgradlebugbuild
01/05/2022  07:44 PM    <DIR>          .
01/05/2022  07:44 PM    <DIR>          ..
01/05/2022  07:44 PM               277 build.gradle
1 File(s)            277 bytes
2 Dir(s)  31,110,651,904 bytes free

首先,生成文件夹不存在,因此无法删除。

Gradle在配置阶段显示消息。但是;dofirst";以及";doLast"消息未显示。

执行后,生成文件夹确实存在,并且正确地填充了生成脚本的副本,这表明"x"任务确实执行了。但是doFirst和doLast中的消息没有打印出来。

StackOverflow和其他地方也有类似的问题,但我看到的例子有缺陷,因为这些问题中显示的代码没有显示输入或输出,只有doFirst和doLast,所以答案是任务已经是最新的,这就是为什么它没有执行;或者任务的整个主体前面是'<lt;'因此是具有doLast块的空任务是一个复制任务的示例,配置了该任务,**正在**明显执行,只是没有运行其doFirst和doLast闭包。

我在Windows10上运行Gradle7.3。

我不需要打印消息,但我发现项目插件的任务后配置在复制任务中没有执行,这似乎归结为这个问题。我尝试使用"into("((文件的路径,而不是包含的文件夹的路径(,并在任务定义中添加outputs.upToDateWhen{false}条目。

您不必在自定义任务中再次调用copy。尝试低于

task x(type: Copy) {
from(projectDir) {
include 'build.gradle'
}
into(buildDir)
println "Configuring " + projectDir
doFirst {
println "Inside doFirst."
}
doLast {
println "Inside doLast."
}
}

最新更新