Gradle Cheat Sheet (5): Interacting with the File System

1. 复制

  在Gradle中复制文件,只需声明一个任务,并把type 设置为Copy :

task copyTask(type: Copy)

  使用from 和into 方法指定所要复制文件的来源文件夹和目标文件夹,如:

task copyImages(type: Copy) {
    from 'images'
    into 'build'
}

这里把images文件夹下的所有内容复制到build文件夹里面。

  使用include 和exclude 可以添加过滤,支持通配符。来源位置、目的位置、包含和排除过滤的组合称为“CopySpec”。如:

task copyJpegs(type: Copy) {
    from 'images'
    include '*.jpg'
    into 'build'
}

这里把images文件夹下的所有.jpg文件复制到build文件夹里面。

  一个复制任务可以从多个来源进行复制,CopySpec和目录树一样是分层的,如:

task copyImageFolders(type: Copy) {
    from('images') {
        include '*.jpg'
        into 'jpeg'
    }

    from('images') {
        include '*.gif'
        into 'gif'
    }

    into 'build'
}

这里包含了两个CopySpec,一个把images下的.jpg文件复制到jpeg文件夹,一个把images下的.gif文件复制到gif文件夹,jpeg和gif两个文件夹位于build文件夹下。

2. 压缩和解压

  Gradle提供了把文件压缩成Zip和Tar包的任务类型,压缩任务与复制基本相同,但需要通过baseName 给出压缩包的名称,通过destinationDir 给出生成压缩包的位置,destinationDir 接受的是Java的File 对象。如:

task zipImages(type: Zip) {
    baseName = 'images'
    destinationDir = file('build')
    from 'images'
}

这里任务类型为Zip ,把images文件夹压缩成名为images.zip的压缩包,放在build文件夹下。

  类似于复制,也可以在Zip 任务中包含子CopySepc:

task zipImageFolders(type: Zip) {
    baseName = 'images'
    destinationDir = file('build')

    from('images') {
        include '*.jpg'
        into 'jpeg'
    }

    from('images') {
        include '*.gif'
        into 'gif'
    }
}

解压文件依然使用Copy 任务,from 需要使用zipTree 指定待解压的文件:

task unpackImages(type: Copy) {
    from zipTree('build/images.zip')
    into 'build/exploded'
}

3. 删除

  使用Delete 任务删除文件:

task deleteBuild(type: Delete) {
delete 'build'
}

 

本部分的完整代码可以在这里找到。