Gradle 脚本 - 等待操作在 file.delete() 之前完成

Gradle Script - Wait action finished before file.delete()

gradle 我正在下载 API 的 zip 文件。之后我解压这个文件,接下来我想删除它。

为此我尝试了很多方法,但找不到正确的解决方案。

我非常熟悉 Gradle 语法(doLast、doFirst)。

task downloadAndDelete(type: Copy) {
        doLast {
            blablabla
            def zipFile = file(pathFile + fileName)
            println '-------- Download zipfile --------'
            blablabla
            from zipTree(zipFile)
            into pathFile
            println '-------- Deleting zipfile --------'
            zipFile.delete()
        }
    }

有时我会出错Cannot convert path to File. path='property (@OutputDirectory destinationDir) for task 'downloadUpdatedStrings'' 有时我的 zipFile 在解压完成之前就被删除了。

确定这个文件解压完成后,如何删除我的 zip 文件。 我也尝试了 ['unzip', '-o', zipFile, '-d', pathFile].execute(),但结果相同。

您应该为三个步骤(downloadunzipdelete)中的每一个使用一个任务:

task downloadMyFile {
    doLast {
         // somehow download your file, e.g.
         file('myFile.zip') << new URL("http://some.url/some/path/file.zip").getText()
    }
}

task unzipMyFile(type: Copy) {
    dependsOn downloadMyFile
    from zipTree('myfile.zip')
    into 'target/path'
    finalizedBy deleteMyFile
}

task deleteMyFile(type: Delete) {
    mustRunAfter unzipMyFile
    delete downloadMyFile
}

现在调用unzipMyFile(或将其用作另一个任务的输入)来执行所有任务就足够了。

请注意,通常不需要在使用后删除文件。只需将它们放在 build 目录中的任何位置,下一个 clean 操作将无论如何将其删除。