我有一个unzipDatagradle任务定义如下:
task unzipFile(type: Copy) {
dependsOn mkdirTrash
dependsOn downloadFile
from zipTree(file("$trashDir/file.zip"))
into trashDir
}
Run Code Online (Sandbox Code Playgroud)
该任务将存档内容直接与存档本身一起解压缩到目录中(在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.
Run Code Online (Sandbox Code Playgroud)
在调试输出中,我看到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
Run Code Online (Sandbox Code Playgroud)
据我所知,这是Gradle的新功能 https://docs.gradle.org/4.2-rc-1/release-notes.html#safer-handling-of-stale-output-files
文档说只有注册为清理任务和源集输出目标的目录是陈旧的。我想,Copy任务是其中之一source set,它的输出必然要删除。
我想知道此功能的优点是什么?是否有可能禁止清理特定目录?任何不肮脏的解决方法?
我遇到了同样的问题,遵循了这种方法,它对我有用,在你的情况下,它会是这样的:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1792 次 |
| 最近记录: |