我有一个简单的复制任务,它成功地复制了文件,但没有执行为该任务配置的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."
}
}