美文网首页
Gradle基础

Gradle基础

作者: 真胖大海 | 来源:发表于2020-02-26 09:58 被阅读0次

    教学视频

    一.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

      //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<Project> {
        @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基础

          本文链接:https://www.haomeiwen.com/subject/rnopchtx.html