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' }
本部分的完整代码可以在这里找到。