我在子项目的 build.gradle 文件中有以下gradle任务,将 file.txt 从名为 from_dir / 的目录复制到目录 to_dir / 并将其重命名为 fileRenamed.txt :
task copyRenameFile(type: Copy) {
System.out.println("copyRenameFile begin")
from('from_dir')
into('to_dir')
include('file.txt')
rename('file.txt', 'fileRenamed.txt')
System.out.println("copyRenameFile end")
}
build.finalizedBy(copyRenameFile)
当我运行gradlew :subprojectname:build
时,此任务在构建任务完成后按预期执行复制,但它在构建任务之前的配置阶段执行println
。
为了在实际执行副本的构建阶段之后出现println
,我尝试使用<<
运算符,如下所示:
task copyRenameFile(type: Copy) << {
但是这会导致任务生物被跳过,并显示以下消息:
[INFO] [org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter] Skipping task ':subprojectname:copyRenameFile' as it has no source files.
这是否意味着在执行阶段找不到 file.txt ?为什么呢?
编辑:在阅读this回答后,我现在明白我对<<
运算符的使用导致配置阶段跳过此任务,这就是找不到源文件。所以我想我不能使用<<
运算符,但是如果在执行任务时而不是在配置任务时我怎么能使println
出现?
答案 0 :(得分:0)
我明白了:
task copyRenameFile(type: Copy) {
doFirst{
System.out.println("copyRenameFile begin")
}
from('from_dir')
into('to_dir')
include('file.txt')
rename('file.txt', 'fileRenamed.txt')
doLast{
System.out.println("copyRenameFile end")
}
}
build.finalizedBy(copyRenameFile)
我摆脱了<<
,而是使用doFirst
和doLast
来确保在执行阶段发生了println
。