Gradle 跳过任务,因为它没有源文件和以前的输出文件

Gradle 跳过任务,因为它没有源文件和以前的输出文件,gradle,build.gradle,gradle-task,Gradle,Build.gradle,Gradle Task,这是我的build.gradle,它有三个任务(一个用于下载zip,一个用于解压缩,另一个用于执行sh文件)。这些任务相互依赖。我用的是Gradle 6。由于这些是相关任务,我使用了以下命令: gradlew C 我得到一个错误: 正在跳过任务“B”,因为它没有源文件和以前的输出文件 build.gradle: task A { description = 'Rolls out new changes' doLast { def url = "http

这是我的
build.gradle
,它有三个任务(一个用于下载zip,一个用于解压缩,另一个用于执行sh文件)。这些任务相互依赖。我用的是Gradle 6。由于这些是相关任务,我使用了以下命令:

gradlew C
我得到一个错误:

正在跳过任务“B”,因为它没有源文件和以前的输出文件

build.gradle

task A {
    description = 'Rolls out new changes'
    doLast {
        def url = "https://${serverName}/xxx/try.zip"
        def copiedZip = 'build/newdeploy/try.zip'
        logger.lifecycle("Downloading $url...")
        file('build/newdeploy').mkdirs()
        ant.get(src: url, dest: copiedZip, verbose: true)
    }
}
          
task B (type: Copy, dependsOn: 'A') {
    doLast {
        def zipFile = file('build/newdeploy/try.zip') 
        def outputDir = file("build/newdeploy")
        from zipTree(zipFile)
        into outputDir
    }
}

task C (type: Exec, dependsOn: 'B') {
    doLast {
       workingDir 'build/newdeploy/try/bin'
       executable 'sh'
       args arguments, url
       ext.output = { return standardOutput.toString() }                        
    }
}

我试着跟随,结果成功了。与其添加要复制的单独任务,不如在任务a本身中添加复制功能

task A {
    description = 'Rolls out new changes'
    doLast {
        def url = "https://${serverName}/xxx/try.zip"
        def copiedZip = 'build/newdeploy/try.zip'
        logger.lifecycle("Downloading $url...")
        file('build/newdeploy').mkdirs()
        ant.get(src: url, dest: copiedZip, verbose: true)
        def outputDir = file("build/newdeploy")
        copy {
          from zipTree(zipFile)
          into outputDir
        }
    }
}

task C (type: Exec, dependsOn: 'A') {
    doLast {
       workingDir 'build/newdeploy/try/bin'
       executable 'sh'
       args arguments, url
       ext.output = { return standardOutput.toString() }                        
    }
}

在执行任务
B
C
时,它们没有配置,因为
doLast
闭包在任务执行后运行。由于未配置任务
B
,因此它没有源文件,会被跳过。