我是Gradle的新手,正在探索它的文件处理功能,即Copy
,Zip
等。根据{{3}},Project
有zipTree
方法,应使用zipPath Object
调用,通常根据file
方法进行评估。它还建议将方法与copy
方法结合起来解压缩ZIP文件,其中copy
接受一个闭包来配置定义文件复制本身的CopySpec
。
在我正在探索的示例中,执行解压缩的task
操作一个在Gradle配置过程开始时尚不存在的文件; dependsOn
另一个task
首先压缩相关文件,如下所示。
task bundleWeb(type: Zip){
destinationDir = file('build')
baseName 'web'
from 'build/web'
exclude 'images/**'
}
最初,我尝试使用非类型化任务解压缩build/web.zip
文件。
task unpackBundle(dependsOn: bundleWeb){
copy{
from zipTree('build/web.zip')
into 'build/exploded'
}
}
然而,这令我惊讶失败;构建失败,说:
无法展开ZIP '... / 1.11-运动-ConfigureFileSystemTasks /编译/ web.zip' 因为它不存在。
但是,通过提供task
Copy type
并删除关闭,Project
可以顺利构建并按预期运行。
task unpackBundle(type: Copy, dependsOn: bundleWeb){
from zipTree('build/web.zip')
into 'build/exploded'
}
这怎么可能?我是否错误地理解了project.copy()
函数的用法?或者typed tasks
做一些不同的配置?
免责声明:示例均来自Udacity的Gradle for Android和Java课程!
答案 0 :(得分:1)
task unpackBundle(dependsOn: bundleWeb) {
copy {
from zipTree('build/web.zip')
into 'build/exploded'
}
}
在执行任务之前,配置任务时执行复制。您希望在执行任务时执行副本:
task unpackBundle(dependsOn: bundleWeb){
doLast {
copy {
from zipTree('build/web.zip')
into 'build/exploded'
}
}
}