- 1.Gradle入门
- 1.Gradle环境配置
- 2.Gradle Wrapper
- 3.生成wrapper
- 4.wrapper配置
- 5.gradle-wrapper.properties
- 自定义wrapper task
- gradle 日志
- gradle 命令行
- 2.Groovy基础
- 2.1 字符串
- 2.2 集合
- 2.3 方法
- 2.4 JavaBean
- 2.5 闭包
- DSL 领域特定语言
- 3.Gradle构建基础
- 3.1 setting文件
- 3.2 build.gradle文件
- 3.3 projects 及Tasks
- 3.4 创建一个任务
- 3.5 任务依赖
- 3.7 自定义属性
- 4.Gradle 任务
- 多种方式创建任务
- 多种方式访问任务
- 任务分组和描述
- << 操作符
- 任务的执行分析
- 任务排序
- 任务的启用和禁用
- 任务的OnlyIf断言
- 任务规则
- 5.Gradle 插件
- 6.java Gradle插件
- 7.Android Gradle插件
- 8.自定义Android Gradle工程
Gradle是一个非常优秀的构建系统工具,它的DSL基于Groovy实现。
1.Gradle环境配置 2.Gradle Wrapper是对gradle的包装,便于团队开发过程中统一Gradle构建的版本。
3.生成wrapper 4.wrapper配置 5.gradle-wrapper.properties#Fri Jul 23 19:34:22 CST 2021 distributionbase=GRADLE_USER_HOME //下载gradle的路径 distributionUrl=https://services.gradle.org/distributions/gradle-6.7.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStorebase=GRADLE_USER_HOME自定义wrapper task gradle 日志 gradle 命令行 2.Groovy基础
Groovy是基于JVM的一种动态语言,Groovy完全兼容Java,有在此增加很多动态类型和灵活的特性。如 闭包 DSL
2.1 字符串Groovy不需要分号,单引号和双引号都可以。
单引号没有运算能力,表示常量字符串。双引号可以直接运行表达式计算。
list set map Queue
list
def numlist = [1,2,3,4] 使用索引访问集合
map
def map = [‘width’:1024,‘height’:768]
println map[‘width’]
def method(int a,int b){
println a+b
}
task invokeMethod<<{
method(1,2)
}
return 可以不写
2.4 JavaBeanclass Person{
private String name
}
task hellJava <<{
person p = new Person()
p.name ="lisi"
println "名字是:${p.name}"
}
2.5 闭包
闭包就是一段代码块
task helloClosure<<{
customEach{
print it
}
}
//closure参数用于接收闭包(代码块)
def customEach(closure){
for (i in 0..<10) {
closure(i)
}
}
传递参数
闭包委托???
用于初始化及工程树配置。为了配置子工程。
子工程只有在settting文件里配置了才能识别、
每个project都会有一个build.gradle文件,它是project构建入口,配置版本,依赖库,配置插件。
Root Project也可以获取所有child project,比如Java在开发大型项目的时候,会有很多模块,每个模块都是project。
subprojects {
apply plugin "java"
repositories {
jecenter()
}
}
}
3.3 projects 及Tasks
gradle中,可以有很多project,可以定义project生成jar,生成war包,也可以创建project用于上传war文件。一个project又包含多个task。
task是一个操作,一个原子性操作。比如打个jar包,复制一分文件,编译一次Java代码
task xxxx{
doOne{
println 'hello'
}
}
3.4 创建一个任务
task customTask1{
doFirst{
println "this is task"
}
doLast{
println "this is last"
}
}
task是一个关键字,它是project对象的一个函数,原型为create(String name,Closure configureClosure),customTask1是任务的名字;第二个参数是闭包,大括号里的代码。
tasks.create("customTask2"){
doFirst {
println "one"
}
doLast {
println "two"
}
}
3.5 任务依赖
dependsOn是Task类的一个方法,可以接收多个依赖的任务作为参数。
task hello {
println "hello"
}
task exMain (dependsOn:hello){
doLast {
println "main"
}
}
还可以依赖多个task
task exMain (){
dependsOn hello,world
doLast {
println "main"
}
}
3.7 自定义属性
4.Gradle 任务
多种方式创建任务
依赖于project给我们提供的快捷方法及TaskContainner提供的相关Create方法,可以有多种方式来创建任务。
def Task createTask = task(createTask)
createTask.doLast {
println "hello world"
}
createTask就是任务名字,可以使用.gradlew createTask 来执行这个任务。这种方式的创建其实调用project对象中的task(String name)的方法
第二种方式 以一个任务名字+ 一个对该任务配置的map对象来创建任务。
def Task createTask2 = task(createTask2,group: basePlugin.BUILD_GROUP)
第三种:任务+闭包
task createTask3{
decription "演示"
doLast {
println "this is task + closure style"
}
}
多种方式访问任务
我们创建的任务都会作为项目(project)的一个属性,属性名就是任务名,可以直接通过该任务名字访问和操作该任务;
其次,任务都是通过TaskContainer创建的,它是我们创建任务的集合,在project中我们通过tasks属性访问TaskContainer.访问的时候,任务名就是key
再则,通过路径访问,一个是get 一个是find,区别为get的时候如果找不到会抛出异常UnknowTaskException。而find找不到返回null。
通过名称访问,也有get 和find 两种,区别和上述一样。
任务分组和描述任务分组就是分类,便于对任务进行归类整理。任务的描述就是说明这个任务有什么作用。
<< 操作符<< 操作符在gradle的task是doLast的短标记形式。
任务的执行分析 任务排序 任务的启用和禁用Task中有个enable属性,用于启用和禁用任务。默认true,表示启用。
任务的OnlyIf断言断言就是一个条件表达式,Task有一个onlyif方法,接受一个闭包作为参数。如果该闭包返回ture表示任务执行。否则跳过。
任务规则 5.Gradle 插件 6.java Gradle插件 7.Android Gradle插件 8.自定义Android Gradle工程


