学习gradle----基础语法

Gradle 里的任何东西都是基于这两个基础概念:
projects ( 项目 )
tasks ( 任务 )

一、入手项目,hello world:
1、在目录中新建build.gradle 的文件
2、在文件中写入

task hello {
    doLast {
        println 'Hello world!'
    }
}

3、在命令行里, 进入脚本所在的文件夹然后输入 gradle -q hello 来执行构建脚本。意思就是让gradle执行名为hello的task。-q 代表 quiet 模式. 它不会生成 Gradle 的日志信息 (log messages), 所以用户只能看到 tasks 的输出

二、用闭包形式修改helloworld

task hello << {
    println 'Hello world!'
}

与前面的例子比较, doLast 被替换成了 <<. 它们有一样的功能, 但看上去更加简洁了

其他闭包例子:

task upper << {
    String someString = 'mY_nAmE'
    println "Original: " + someString
    println "Upper case: " + someString.toUpperCase()
}

三、一些常用语法形式
1、循环

task count << {
    4.times { print "$it " }
}

输出:

> gradle -q count
0 1 2 3

2、依赖,应该是无task的先后顺序

task taskX(dependsOn: 'taskY') << {
    println 'taskX'
}
task taskY << {
    println 'taskY'
}

gradle -q taskX 命令的输出

> gradle -q taskX
taskY
taskX

或者可以在参数外声明,加入一个依赖

task taskX << {
    println 'taskX'
}
task taskY << {
    println 'taskY'
}
taskX.dependsOn taskY,otherTask

3、动态任务

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}

创建了4个名字不同的任务 task0, task1, task2, task3
gradle -q task1 命令的输出

> gradle -q task1
I'm task number 1

4、加入行为

task hello << {
    println 'Hello Earth'
}
hello.doFirst {
    println 'Hello Venus'
}
hello.doLast {
    println 'Hello Mars'
}
hello << {
    println 'Hello Jupiter'
}

gradle -q hello 命令的输出

> gradle -q hello
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter

doFirst 和 doLast 可以被执行许多次. 他们分别可以在任务动作列表的开始和结束加入动作. 当任务执行的时候, 在动作列表里的动作将被按顺序执行. 这里第四个行为中 << 操作符是 doLast 的简单别称.

5、短标记法
有一个短标记 $ 可以访问一个存在的任务. 也就是说每个任务都可以作为构建脚本的属性:

task hello << {
    println 'Hello world!'
}
hello.doLast {
    println "Greetings from the $hello.name task."
}

gradle -q hello 命令的输出

> gradle -q hello
Hello world!
Greetings from the hello task.

name 是任务的默认属性, 代表当前任务的名称, 这里是 hello.

6、自定义任务属性

task myTask {
    ext.myProperty = "myValue"
}

task printTaskProperties << {
    println myTask.myProperty
}

gradle -q printTaskProperties 命令的输出

> gradle -q printTaskProperties
myValue

7、定义使用方法

File[] fileList(String dir) {
    file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}

使用方法

task checksum << {
    fileList('../antLoadfileResources').each {File file ->
        ant.checksum(file: file, property: "cs_$file.name")
        println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
    }
}

8、默认任务

defaultTasks 'clean', 'run'

task clean << {
    println 'Default Cleaning!'
}

task run << {
    println 'Default Running!'
}

task other << {
    println "I'm not a default task!"
}

gradle -q 命令的输出

> gradle -q
Default Cleaning!
Default Running!

9、通过 DAG 配置
Gradle 有一个配置阶段和执行阶段. 在配置阶段后, Gradle 将会知道应执行的所有任务. Gradle 为你提供一个"钩子", 以便利用这些信息.

task distribution << {
    println "We build the zip with version=$version"
}

task release(dependsOn: 'distribution') << {
    println 'We release now'
}

gradle.taskGraph.whenReady {taskGraph ->
    if (taskGraph.hasTask(release)) {
        version = '1.0'
    } else {
        version = '1.0-SNAPSHOT'
    }
}

最重要的是 whenReady 在 release 任务执行之前就已经影响了 release 任务. 甚至 release 任务不是首要任务 (i.e., 首要任务是指通过 gradle 命令的任务).

你可能感兴趣的:(gradle)