Gradle Copy Typed Task配置没有错误,但具有复制关闭的等效非类型任务失败

时间:2018-01-20 15:13:35

标签: gradle groovy build.gradle

我是Gradle的新手,正在探索它的文件处理功能,即CopyZip等。根据{{​​3}},ProjectzipTree方法,应使用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课程!

1 个答案:

答案 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'
        }
    }
}