Gradle 构建脚本基础

构建块

每个Gradle构建都包含三个基本的构建快,project,task和property,每一个构建块至少包含一个project,进而又包含一个或多个task,project和task的暴露的属性可以控制构建
在这里插入图片描述
在Gradle中可以有很多的Project,其实每一个Project都是在你的业务范围内,被你抽象出来的一个独立的模块,你可以根据项目的情况进行抽象分类,最后一个个的Project组成了整个Gradle的构建
每个Project由多个Task组成,Task就是一个原子性的操作

Project
一个项目(project)代表一个正在构建的组件(如:一个jar文件),或者一个想要完成的目标,每个Gradle脚本至少定义一个项目,当构建进程启动后,Gradle基于build.gradle中的配置实例化org.gradle.api.Project类,并通过project变量使其隐式可用
在这里插入图片描述
Task
在这里插入图片描述

Gradle 的构建生命周期

在这里插入图片描述
在初始化阶段,Gradle为项目创建了一个Project实例,在给定的构建脚本中定义了一个项目,构建阶段,非常适合加载所需配置,执行阶段,就是最终的动作

Setting文件

在Gradle中定义了一个设置文件,用于初始化工程树配置,该文件默认名为Setting.gradle,放在工程的根目录下
该文件作用为配置子工程,一个根工程包括很多子工程,对应在Android Studio 中的 Project =rootProject和Module=子Project
一个子工程只有在Setting.gradle中配置了才会别Gradle识别,才会在构建的时候包含进去

Build文件

每一个Project都会有一个Build.gardle文件,该文件是Project构建的入口,可以在这里针对每一个Project进行配置,比如配置版本,插件,依赖等
RootProject 可以获取到所有的ChildProject,所以我们可以在RootProject中对ChildProject进行统一配置

例如

allprojects {
    repositories {
        google()
        jcenter()
    }
}

Gradle 任务

创建任务

除了实现Hello World的例子采用的创建任务方式,还有其他的3种创建任务方式。

1.直接用任务名称创建。

def Task hello=task(hello)
hello.doLast{
	 println "hello world"
}

2.任务名称+任务配置的Map对象创建。

def Task hello=task(hello,group:BasePlugin.BUILD_GROUP)
hello.doLast{
	 println "hello world"
}

在这里插入图片描述
3.TaskContainer的create方法创建。

tasks.create(name: 'hello') << {
    println "hello world"
}

任务依赖
任务依赖会决定任务运行的先后顺序,被依赖的任务会在定义依赖的任务之前执行。创建任务间的依赖关系如下所示。

task hello << {
    println 'Hello world!'
}
task go(dependsOn: hello) << {
    println "go for it"
}

在hello任务的基础上增加了一个名为go的任务,通过dependsOn来指定依赖的任务为hello,因此go任务运行在hello之后。
运行gradle -q go构建脚本,打印结果如下:
Hello world!
go for it

任务的分组和描述
Gradle有任务组的概念,可以为任务配置分组和描述,以便于更好的管理任务,拥有良好的可读性。改造3.2小节的例子,为hello任务添加分组和描述。

task hello {
	group = 'build'
	description = 'hello world'
    doLast {
    	println "任务分组: ${group}"
        println "任务描述: ${description}"
    }
}
task go(dependsOn: hello) << {
    println "go for it"
}

也可以采用其他的创建任务方式来为任务添加分组和描述,如下所示。

def Task hello=task(hello)
hello.description ='hello world'
hello.group=BasePlugin.BUILD_GROUP
hello.doLast{
	println "任务分组: ${group}"
    println "任务描述: ${description}"
}
task go(dependsOn: hello) << {
    println "go for it"
}

排除任务
如果我们不想运行go任务,可以运行gradle hello -x go命令:

获取所有任务
通过运行gradle tasks命令来获取所有的任务信息,这样就不需要打开源码了

获取任务帮助信息
通过运行gradle help --task hello命令来显示hello任务的帮助信息。
可以看到hello任务的路径、类型、描述和分组。

多任务调用
通过命令行一次执行多个任务,每个任务通常只会执行一次,我们运行gradle task1 task2,会先执行task1任务后执行task2任务

任务名称缩写
可以对使用驼峰命名的任务进行缩写,对于名称特别长的任务这个特性非常有用,不过需要注意一点,那就是任务名称的缩写必须是唯一的

自定义属性
project个task 都允许用户添加自定义属性,要添加额外的属性,用ext属性就可以实现,添加后可以通过ext 对自定义属性,读取和设置。

//定义一个project 属性
project.ext.age =18
//定义多个自定义属性
ext{
    name1 = "renxiaohui"
    sex="男"
}

task bb {
    doLast{
        println(age+name1+sex)
    }
}

执行 bb任务输出:
在这里插入图片描述
任务排序
TaskB.shouldRunAfter (TaskA) 表示 TaskB应该在TaskA执行后在执行

TaskB.mustRunAfter (TaskA) 表示 TaskB必须在TaskA执行后在执行,更加严格

任务的启用和禁止
Task中有一个属性enabled,用于启用和禁止任务,默认是true启用,设置false 表示禁用

任务的onlyif 断言
断言就是一个条件表达式,Task有一个onlyif方法,他接受一个闭包作为参数,如果该闭包返回true,则任务执行,如果该闭包返回false,任务不执行

//定义一个project 属性
project.ext.age =18
//定义多个自定义属性
ext{
    name1 = "renxiaohui"
    sex="男"
}

task bb {
    doLast{
        println(age+name1+sex)
    }
}
bb.onlyIf{
    true
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值