Gradle基础

教学视频

一.Gradle基础概念

1.1 gradle发布的版本

distributions

1.2 gradle wrapper

让项目用固定版本的gradle构建。
比如,如果自己电脑的gradle版本是4.1,但是项目用的是5.1,
那么使用gradle wrapper中指定项目使用的gradle版本是5.1,
就能让项目固定使用5.1版本的gradle。

创建gradle wrapper

gradle wrapper //创建gralde wrapper

./gradlew //通过gradle wrapper 调用gradle

1.3 gradleUserHome

路径 ~/.gradle

  • ~/.gradle/wrapper/dists 下载的所有gradle wrapper的版本
  • /Users/xuyabo/.gradle/caches/modules-2/files-2.1 gradle依赖下载的jar,aar等文件

1.4 Daemon

gradle会使用一个一直存在的Daemon jvm 加快构建

二.groovy

运行在groovy jvm上的脚本语言
书籍 groovy in acton 2

2.1 对groovy语言机制的理解

new A().print()
java理解:创建一个A对象,然后调用器print方法
grooy理解: 创建一个对象,利用反射查找print方法,然后调用

2.2 闭包(函数)

如下:task函数接受一个字符串和一个闭包作为参数

task("secondTask", {
    dependsOn "firstTask"
    println "second:configure"
    doLast {
        println "second:executing"
    }
})

2.3 dsl

  • http://docs.groovy-lang.org/docs/latest/html/documentation/core-domain-specific-languages.html
  • 特性:可以不写括号
    例如
  //turn(left).then(right)
  turn left then right 

三.Gradle构建

Gradle构造的三个阶段

  • Initailaztion
    决定哪些项目参与构建,为工程创建Project对象
  • Configuration
    对project进行配置,project有哪些task,插件即将build.gradle从上到下跑一遍
  • Execution
    运行task
task("firstTask",{
   println "configure" //配置阶段执行 
   doLast{
       println "executing"//执行阶段执行

   }
})

执行 ./gradlew help

image.png

执行help任务,因为会配置,所以会打印configure

执行 ./gradlew firstTask


image.png

执行firstTask任务,executing才会打印

Gradle的核心模型

  • Project 代表一个项目
  • Task
    + doFirst(),doLast(),配置阶段将闭包放入任务列表中,执行阶段才真正执行闭包
    + dependences on 依赖
     task("firstTask"){
        println "first:configure"
        doLast{
          println "first:executing"
        } 
      }


    task("secondTask"){
        dependsOn "firstTask"
        println "second:configure"
        doLast{
          println "second:executing"
        }
    }

执行结果

./gradlew secondTask
---------
> Configure project :
first:configure
second:configure

> Task :firstTask
first:executing

> Task :secondTask
second:executing

因为firstTask 写在 secondTask后面,所以配置时,先配置firstTask再配置secondTask.
因为secondTask依赖firsttask,所以执行时,先执行firstTask再执行secondTask

  • Lifecycle与Hook
    • afterEvaluate 在project evaluate后(就是confiuration后)执行
afterEvaluate {
    println "afterEvaluate"
}
task("firstTask"){
    println "first:configure"
    doLast{
        println "first:executing"
    }
}

task("secondTask"){
    dependsOn "firstTask"
    println "second:configure"
    doLast{
        println "second:executing"
    }
}
➜  wrapper-demo ./gradlew secondTask
<----
> Configure project :
first:configure
second:configure
afterEvaluate

> Task :firstTask
first:executing

> Task :secondTask
second:executing

插件编写

文档

  • 编写简单插件
    • 定义一个类继承Plugin
    • 调用apply plugin应用插件,及调用MyPlugin的apply参数
      在这个例子中MyPlugin生成了task0-task9 10个task
class MyPlugin implements Plugin {
    @Override
    void apply(Project project) {
        (0..10).each {
            index ->
                def captureId = index
                project.task('task' + index) {
                    doLast {
                        println("task print" + captureId)
                    }
                }
        }
    }
}

apply plugin: MyPlugin

  • script插件
    使用apply from 从url或者本地文件加载插件

你可能感兴趣的:(Gradle基础)