學習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 命令的任務).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章