Gradle系列之構建指令碼基礎

2022-07-04 12:57:12 字數 4337 閱讀 2305

setting 檔案

build 檔案

project 和 tasks

任務的建立

任務依賴

任務間的互動

自定義屬性

總結setting 檔案

說一下 gradle 構建專案的 setting 檔案,該檔案主要用來配置當前工程,比如 android 開發中乙個專案中可能有多個子 module,當不需要某個子 module 時,可以取消該 module 在配置檔案 setting 中的配置即可,當然只有在 setting 檔案中配置的子 module 才會被構建,當然不只是 android 開發,只要使用 gradle 構建的專案都一樣,setting 是 gradle 構建專案預設的配置檔名,下面簡單測試一下 setting.gradle 檔案的使用,測試工程目錄如下:

├─gradlesetting

│ ├─.gradle

│ │ ├─4.1

│ │ │ ├─filechanges

│ │ │ ├─filehashes

│ │ │ └─taskhistory

│ │ └─buildoutputcleanup

│ └─test

│ └─method

│ └─.gradle

│ ├─4.1

│ │ ├─filechanges

│ │ ├─filehashes

│ │ └─taskhistory

│ └─buildoutputcleanup

│ build.gradle

│ setting.gradle

在工程名為 gradlesetting 的工程中 test 資料夾下有乙個 method 的子專案,這裡會通過配置 setting.gradle 檔案將子專案 method 構建到 gradlesetting 中,setting.gradle 檔案內容如下:

println "---------test----setting.gradle----------"

//輸出當前工程目錄

println(rootdir)

//指定要參與構建的子專案

include ':method'

project(':method').projectdir = new file(rootdir,'test/method')

來看一下輸出結果:

ps e:\gradle\study\gradlesetting> gradle testgradlesetting

---------test----setting.gradle----------

e:\gradle\study\gradlesetting

> configure project :

testgradlesetting

> configure project :method33

30獲取方法返回的結果:3012

345build successful in 2s

因為在 setting.gradle 檔案中配置了 method,從輸出結果看 method 確實參與了構建,取消在 setting.gradle 檔案中的配置,則不會構建 method,最好自己驗證一下。

上面配置了子專案 method 所在的位置,如果不指定則預設是與 setting.gradle 同級的目錄。

build 檔案

//配置子專案依賴的倉庫

subprojects

}//配置全部專案

allprojects

...

通過本小節主要了解 build.gradle 檔案的作用即可,實際開發中針對不同型別的專案會有更詳細的相應配置策略。

project 和 tasks

在 gradle 中有很多 project,可將某個 project 打包成 jar 提供給另乙個 project 使用,每個 project 都是根據其業務需求抽象出來的乙個子模組,最終通過 gradle 構建成完整的專案。

任務的建立

對於任務的建立已經比較熟悉了,下面使用 task 宣告乙個任務:

//1. 建立乙個任務

task createtask

dolast

}//2. 使用taskcontainer建立乙個任務,project已經定義的taskcontainer,即tasks

tasks.create("createtask1")

dolast

}

task 可以理解為建立任務的關鍵字,實際上 task 是 project 裡面的乙個方法,在 groovy 中可以省略方法引數上的括號,花括號裡的內容是乙個閉包,主要是對 task 進行相關配置,dofirst 和 dolast 是 task 中常用的兩個方法,分別會在該 task 開始和結束時執行。

任務依賴

//單任務依賴:通過dependson指定要依賴的任務

task b(dependson: a)

}task c

}//多工依賴

task d

}

下面看一下執行多依賴任務 gradle d 的執行結果:

ps e:\gradle\study\gradlesetting> gradle d

> task :a

a> task :c

c> task :d

dbuild successful in 2s

顯然,執行任務 d,其依賴的其他兩個任務先執行,控制了任務執行的先後順序。

注意:指令碼是按照順序執行,如果任務任務 a 和 c 在任務 d 的後面定義,當執行任務 d 的時候肯定會出錯。

任務間的互動

建立的任務都有自己的名稱,其型別是 task,那麼我們就可以通過 task api 來控制控制任務的執行,使用任務名操作任務的原理是:project 在建立任務的時候,已經將該任務對應的任務宣告為 project 物件的乙個型別為 task 的乙個屬性,測試**如下:

//任務之間的互動

task e

e.dofirst

e.dolast

上述**的執行結果如下:

ps e:\gradle\study\gradlesetting> gradle e

> configure project :

hello e

e是不是project的屬性:true

> task :e

dofirst

dolast

build successful in 1s

自定義屬性

project 和 task 都允許使用者新增額外的自定義屬性,通過應用所屬對應的 ext 屬性來實現,新增之後可以通過 ext 屬性對自定義的屬性進行讀取和設定,如果要同時新增多個自定義屬性,可以通過 ext **塊,參考如下**定義自定義屬性:

//自定義單個屬性

ext.name1 = "gradle"

//自定義多個屬性

ext//在sourceset中使用自定義屬性

sourcesets.all

//配置自定義屬性

sourcesets

test

}task customproperty"

println "age=$"

println "score=$"

sourcesets.each resourcedir is $" }}

上述**的執行結果:

ps e:\gradle\study\gradlesetting> gradle customproperty

> configure project :

name=gradle

age=10

score=100

main resourcedir is main/res

test resourcedir is test/res

build successful in 2s

自定義屬性相較區域性變數作用域更加廣泛,可以跨 task、project 訪問自定義屬性,只要能訪問這些屬性所屬的物件,那麼這些屬性就可以被訪問到, android 開發中可以使用自定義屬性單獨定義版本號、版本名稱以及用到的第三方庫的版本,將其同意在單獨的 gradle 檔案中,各 module 直接獲取即可,不僅方便管理依賴庫的版本,還在一定程度上提高工作效率。

總結

Gradle入門 構建指令碼的基礎介紹

1.普通建立 task hello1 2.直接用任務名稱建立 task hello2 task hello2 hello2.dolast3.任務名稱 任務配置建立 task hello3 task hello3,group baseplugin.build group hello3.dolast4....

Gradle自動構建系列之 四 一 建立任務

gradle中有多中方式建立任務,都是依賴於project提供的快捷方式以及taskcontainer提供的create方法。def task leslie task leslie leslie.dolast 同樣是基於project物件的task方法,引數是任務名 乙個對該任務配置的map物件 d...

Gradle系列之Android Gradle外掛程式

android gradle 外掛程式分類 android 外掛程式的分類是根據 android 工程的屬性進行分類的,android 工程分為三類,具體如下 使用 android gradle 外掛程式 gradle 外掛程式使用時以外掛程式的 id 作為唯一標識,如果是第三方的外掛程式,還必須在...