1. 程式人生 > >Gradle構建指令碼入門

Gradle構建指令碼入門

黃少存,叩丁狼高階講師,本文為原創文章,轉載請註明出處。  

上一篇咱們已經知道了Gradle構建指令碼的重要性,要使用比較複雜的專案構建就需要來書寫構建指令碼,那Gradle 的構建指令碼有哪些呢,請看構建指令碼介紹.

構建指令碼介紹

Gradle 構建指令碼中最重要的兩個概念是 project 和 task,任何一個 Gradle 構建都由一個或者多個project 組成,每個 project 包括許多的構建部分,可以是一個 jar 包,也可以是一個 web 應用,也可以是多個 jar 的整合,可以部署應用和搭建環境.Gradle 的 build-by-convention 可以指定 project 具體做什麼.

每個 project 由一個或多個 task 組成,每個 task 表示在構建執行過程中的一個原子操作。如編譯,打包,生成 javadoc,釋出到倉庫等操作。

[project 和 task 的關係]如下圖

Project 和 Task依賴圖

如圖: Project1 依賴 Project2,所以需先構建 Project2 ,Project2 中有三個任務 Task FGH,由於依賴關係,先執行 Task G 再執行Task F 再執行 Task H.Project1 中的 Task 也是先執行被依賴的任務.

那 Project 到底是什麼呢? 有什麼內容呢? 以下咱們就來看下Project .

Project

一個 project 代表一個正在構建的元件(jar/war檔案),當構建開始時,Gradle 會基於 build.gradle 例項化一個 org.gradle.api.Project 物件.並通過 project 變數來隱式呼叫其成員.那 Project 的成員有哪些呢?

Project 屬性
| 名字 | 型別 | 預設值 |
|—————————-|———————-|——————————————|
| project | Project | project 例項 |
| group | Object | 專案分組:未指定 |
| name | String | 專案目錄名 |
| version | Object | 專案版本:未指定 |
| path | String | 專案絕對路徑 |
| description | String | 專案描述 |
| projectDir | File | 包含生成指令碼目錄 |
| buildDir | File | projectDir/build |
| ant | AntBuilder | AntBuilder 例項 |
常用的屬性有project (隱式使用),group,name,version

Project 其他常用配置

  • plugins , apply plugin 用來引入外掛使用
  • dependencies 依賴配置
  • repositories 倉庫配置
  • task 任務書寫
  • ext,gradle.properties Project 中屬性的其他配置方式

以上咱們已經對 project 有一定的瞭解了,知道 Gradle 構建專案離不開 Project 物件,以上配置都會被封裝到 Project 物件中,但是Project 中同樣離不開任務(task),以下咱們就來看下什麼是 task ,task 有什麼作用?

task 任務介紹

每個任務在構建執行過程中會被封裝成 org.gradle.api.Task 物件. 主要包括任務的動作和任務依賴.任務動作定義了一個原子操作.可以定義依賴其他任務、動作順序和執行條件.那任務有哪些相關操作呢?

任務主要操作動作

  • dependsOn : 依賴相關操作
  • doFirst : 任務執行之前執行的方法
  • doLast,<< : 任務執行之後執行的方法、

例子:

// 定義一個簡單的任務
task t1 {
    println 'hello t1'
}
// t2 執行時依賴 t1
task t2 (dependsOn : 't1'){
    //  t2 執行前執行操作,
    doFirst{
        println 'do first'
    }
    println 'hello t2'
    // t2 執行後執行操作,
    doLast{
        println 'do last'
    }
}

命令 : gradle t2 或 雙擊 IDEA -> 右邊Gradle -> Task -> other -> t2

> Configure project :
hello t1
hello t2

> Task :t1

> Task :t2
do first
do last

以上結果可以看出,直接定義在任務下的程式碼會在配置 project 時執行,其他時候不執行,就算依賴也不執行.只有在doFirst 或 doLast 中配置的操作才會在呼叫任務或者依賴執行時呼叫.以上是 task 的簡單運用,至於任務的定義細節請看下一篇:Gradle 的任務task