几乎每个构建都涉及到文件的操作。因此,为了方便文件操作,Gradle 专门设计了操作文件的 API。
这些 API 包含两部分:
- 指定要处理的文件和目录
- 指定要如何处理文件和目录
# 拷贝文件(Copy)
将特定文件拷贝到指定目录。
task copyCache(type:Copy){ | |
from file("${buildDir}/cache/hello.txt") | |
into file("${buildDir}/log") | |
} |
Project.file() 方法是用于创建当前项目下的一个文件或者目录。
我们也可以不使用 file() 方法,直接使用路径。
task copyCache2(type:Copy){ | |
from "${buildDir}/cache/hello.txt" | |
into "${buildDir}/log2" | |
} |
当然,我们也可以同时拷贝多个文件到指定目录。
task copyFiles(type:Copy){ | |
from "${buildDir}/cache/hello.txt", "${buildDir}/generated/1.txt" | |
into "${buildDir}/log3" | |
} |
现在考虑另外一种情况,我们需要拷贝指定目录下的 pdf 格式的文件。
task copyPdfReportsForArchiving(type: Copy) { | |
from "${buildDir}/reports" | |
include "*.pdf" | |
into "${buildDir}/toArchive" | |
} |

我们也可以拷贝 reports 目录以及它的子目录下的 pdf 文件。
task copyAllPdfReportsForArchiving(type: Copy) { | |
from "${buildDir}/reports" | |
include "**/*.pdf" | |
into "${buildDir}/toArchive" | |
} |

# 创建归档文件(zip,tar 等)
Gradle 提供了 Zip,Tar,Jar 等任务,可以将文件打包成 .zip , .tar 或者 .jar 格式的文件。
例如,我们可以将 ${buildDir}/toArchive 目录下的文件,打包成 ${buildDir}/dist 目录的 my-distribution.zip 文件
task packageDistribution(type: Zip) { | |
archiveName = "my-distribution.zip" | |
destinationDir = file("${buildDir}/dist") | |
from "${buildDir}/toArchive" | |
} |
# 打开档案文件
Project.zipTree 和 Project.tarTree 方法可以从相应的归档文件生成 FileTree 。 FileTree 可以用在 from 方法中。如下所示。
task unpackFiles(type: Copy) { | |
from zipTree("${buildDir}/dist/my-distribution.zip") | |
into "${buildDir}/resources" | |
} |
# 创建目录
我们可以使用 Project.mkdir 方法创建目录。
task ensureDirectory { | |
doLast { | |
mkdir "images" | |
} | |
} |
# 移动文件或目录
Gradle 并没有提供移动文件或者目录的方法。不过我们可以使用 ant 的方法。
task moveReports { | |
doLast { | |
ant.move file: "${buildDir}/reports", | |
todir: "${buildDir}/toArchive" | |
} | |
} |
# 删除文件和目录
在 Gradle 中,可以使用 Delete 任务或者 Project.delete 方法删除文件或者目录。
# 删除目录
task myClean(type: Delete) { | |
delete buildDir | |
} |
# 删除指定文件
如果想要控制删除哪些文件,我们可以使用 FileCollection 和 FileTree 。
删除源文件夹下的临时文件
task cleanTempFiles(type: Delete) { | |
delete fileTree("src").matching { | |
include "**/*.tmp" | |
} | |
} |