Gradle 使用 leftShift (<<) 运算符时复制任务找不到源文件
Gradle copy task not finding source files when leftShift (<<) operator used
我在子项目的 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
s任务。
为了使 println
s 在实际执行副本时出现在构建阶段之后,我尝试使用 <<
运算符,如下所示:
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
在任务执行时而不是在配置时出现?
我想通了:
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
发生在执行阶段。
我在子项目的 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
s任务。
为了使 println
s 在实际执行副本时出现在构建阶段之后,我尝试使用 <<
运算符,如下所示:
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
在任务执行时而不是在配置时出现?
我想通了:
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
发生在执行阶段。