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

时间:2018-04-12 08:30:32

标签: android gradle android-gradle build.gradle unzip

使用gradle我可以下载带有API的zipfile。之后,我解压缩此文件,接下来我要删除它。

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

我非常喜欢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。

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

1 个答案:

答案 0 :(得分:1)

您应该为三个步骤(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操作将无论如何都将其删除。