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

1. 复制

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

task copyTask(type: Copy)
task copyTask(type: Copy)
task copyTask(type: Copy)

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

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

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

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

task copyJpegs(type: Copy) {
from 'images'
include '*.jpg'
into 'build'
}
task copyJpegs(type: Copy) { from 'images' include '*.jpg' into 'build' }
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'
}
task copyImageFolders(type: Copy) { from('images') { include '*.jpg' into 'jpeg' } from('images') { include '*.gif' into 'gif' } into 'build' }
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'
}
task zipImages(type: Zip) { baseName = 'images' destinationDir = file('build') from 'images' }
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'
}
}
task zipImageFolders(type: Zip) { baseName = 'images' destinationDir = file('build') from('images') { include '*.jpg' into 'jpeg' } from('images') { include '*.gif' into 'gif' } }
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'
}
task unpackImages(type: Copy) { from zipTree('build/images.zip') into 'build/exploded' }
task unpackImages(type: Copy) {
    from zipTree('build/images.zip')
    into 'build/exploded'
}

3. 删除

  使用Delete 任务删除文件:

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

 

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