今日名言
我们每天都在经受巨大的痛苦,而最大的痛苦就是不被人理解
导读
通过上一节gradle系列——Task任务简单使用 我们知道了gradle中Task的简单使用,比如如何给任务添加行为,如何为任务设置依赖关系,下面我们开始针对Copy任务来详解Task的高级用法
在开发的过程中,我们见过很多种定义任务的方式,不要奇怪,gradle的语法比较松散,基本上有这些方式定义
// 第一种,比较普通的方式
task hello {
doLast {
println "Hello World!"
}
}
// 第二种,以字符串形式定义的
task('hello') {
doLast {
println "hello"
}
}
// 第三种,以字符串形式定义的,
// 其类型为Copy任务类型,接下来会具体讲解
task('copy', type: Copy) {
from(file('srcDir'))
into(buildDir)
}
// 第四种,使用create创建
tasks.create(name: 'hello') {
doLast {
println "hello"
}
}
// 第四种,使用create创建
tasks.create(name: 'copy', type: Copy) {
from(file('srcDir'))
into(buildDir)
}
如果遇见上面这些方式不要慌张,他们表示的意思都是一样的
配置任务
我们针对copy任务进行配置,了解了copy任务的配置,我们就可以举一反三进行其他任务的配置
首先我们定义一个任务
task myCopy(type: Copy) {
from 'src'
into 'target'
include('**/*.txt', '**/*.xml', '**/*.properties')
}
该任务实现了把src目录下的所有 .txt、.xml 和 .properties 文件全部拷贝到target
目录下。
比如我们要拷贝一个文件时需要对文件进行改名,我们可以这么写
task myCopy(type: Copy) {
from 'src'
into 'target'
include('text.txt')
// 改名操作
rename { String fileName ->
fileName = "gai.txt"
}
}
有一个重要的问题,我们从何处得知这些操作如何做呢
当然是官网:gradle官网
Gradle 中很多其它常用的任务,比如Jar
、Delete
、War
、Zip
、Tar
和Upload
等等,这些的用法和 Copy 配置一样,大家可以自己编写任务测试下
这里贴一个Jar类型的任务
打包jar的一个任务
task makeJar(type: Jar) {
// 输入文件
from zipTree(file('classes.jar'))
// 添加文件
from fileTree(dir: 'src/main', includes: ['assets/**']) // 打包assets目录下的所有文件
// 输出名称 会自动加上.jar
baseName = "test"
// 输出路径
destinationDir = file('des/jar/')
}