我的unzipData
gradle任务定义如下:
task unzipFile(type: Copy) {
dependsOn mkdirTrash
dependsOn downloadFile
from zipTree(file("$trashDir/file.zip"))
into trashDir
}
该任务将存档内容直接解压缩到具有存档本身的目录中(位于trash
目录,该目录是所有任务工件的根目录,只有在完成所有准备任务后才能删除。
在我将gradle包装器更新到版本4.2.1之前,以前的工作一直有效。
任务执行开始产生错误:
FAILURE: Build failed with an exception.
* What went wrong:
Cannot expand ZIP 'trash/file.zip' as it does not exist.
在调试输出中,我看到gradle删除了整个trash
目录
> Task :unzipFile
11:56:23.145 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'Task :unzipFile' started
11:56:23.145 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':unzipFile'
11:56:23.145 [INFO] [org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter] Putting task artifact state for task ':unzipFile' into context took 0.0 secs.
11:56:23.204 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'Clean stale outputs' started
11:56:23.204 [INFO] [org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter] Deleting stale output file: /.../trash
据我所知,这是gradle的新功能 https://docs.gradle.org/4.2-rc-1/release-notes.html#safer-handling-of-stale-output-files
文档说只有目录注册为清洁任务的目标和源集输出是陈旧的。我想,Copy
任务是source set
之一,它的输出必然会被删除。
我想知道这个功能的优点是什么? 是否有可能禁止清理特定目录? 任何不肮脏的解决方法?
答案 0 :(得分:2)
我遇到了同样的问题,跟着this approach,它对我有用,在你的情况下它会是这样的:
sourceSets {
main {
output.dir("$trashDir", builtBy: 'unzipFile')
}
}
task unzipFile(type: Copy) {
dependsOn mkdirTrash
dependsOn downloadFile
from zipTree(file("$trashDir/file.zip"))
into trashDir
outputs.dir sourceSets.main.output.resourcesDir
}