Gradle基础

2020-02-26  本文已影响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

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构造的三个阶段

task("firstTask",{
   println "configure" //配置阶段执行 
   doLast{
       println "executing"//执行阶段执行

   }
})

执行 ./gradlew help

image.png

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

执行 ./gradlew firstTask


image.png

执行firstTask任务,executing才会打印

Gradle的核心模型

     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

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

插件编写

文档

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

上一篇 下一篇

猜你喜欢

热点阅读