当使用leftShift(<<<<<")运算符时,Gradle复制任务未找到源文件

时间:2017-01-20 16:11:02

标签: gradle android-gradle build.gradle gradlew

我在子项目的 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出现?

1 个答案:

答案 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)

我摆脱了<<,而是使用doFirstdoLast来确保在执行阶段发生了println