建立Task的多種方法

2022-01-11 02:24:58 字數 1994 閱讀 6242

gradle的project從本質上說只是含有多個task的容器,乙個task與ant的target相似,表示乙個邏輯上的執行單元。

我們可以通過多種方式定義task,所有的task都存放在project的taskcontainer中。

(1)呼叫project的task()方法建立task

在使用gradle時,建立task最常見的方式便是:

task hello1 <<
這裡的「<

task hello2 

}

另外,如果需要向task的最前面加入執行過程,我們可以使用dofirst

task hello3 

}

上面的 gradle 的 dsl 實際上是一種內部的 dsl 。task關鍵字實際上是乙個方法呼叫,該方法屬於project。project存在多個過載的 task()方法。在呼叫 groovy 方法時,我們可以不用將引數放在括號內。

上面三個自定義的task都位於taskcontainer中,project中的tasks屬性表示該taskcontainer。

我們可以新建乙個task來顯示這些資訊:

task showtasks
在第一章中的 build.gradle 中加入 showtasks,再執行 gradle showtasks ,命令列輸出如下:

上面的 defaulttaskcontainer_decorated 表示 tasks 型別。而5表示自定義的 task,包括 showtasks 本身。

(2)通過 taskcontainer 的 create() 方法建立 task。

taskcontainer 提供了大量過載的 create() 方法用於新增 task。

task.create(name: '

hello4

') <<

(3)宣告task之間的依賴關係

task之間是可以存在依賴關係,比如taska依賴taskb,那麼在執行taska時,gradle會先執行taskb,在執行taska,我們可以在定義乙個task的同時宣告它的依賴關係:

task hello5(dependson: hello4)<<
當然,我們也可以在定義task之後再宣告依賴:

task hello6 <<

hello6.dependson hello5

(4)配置task

乙個task除了執行操作之外,還包含了多個property。其中gradle為每個task預設定義的property。比如description,logger等。

另外每乙個特定的task還可以含有特定的property,比如copy的from和to等。

也可以動態地向task中加入額外的property。在執行乙個task前,我們通常都需要先設定property的值,gradle提供了多種方法設定task的property的值。

首先,我們可以在定義task的時候對property進行配置:

task hello7 <<
我們還可以通過閉包的方式來配置乙個已有的task:

task hello8 <<

hello8

實際上對於hello8的description發生在建立該task後,執行gradle hello8時,依然能夠正確的列印出 this is hello8 。這是因為 gradle 在執行 task 時分為兩個階段:配置階段、執行階段。執行 hello8 前,會先掃瞄整個build.gradle文件,然後設定屬性,再執行 hello8。

還可以通過configure()完成property的設定:

task hello9 <<

hello9.configure

實際上,通過閉包的方法配置task在內部也是通過呼叫task的configuration方法完成的,對此將在後面講。

int String 互轉的多種方法

1 如何將字串 string 轉換成整數 int?a.有兩個方法 1 int i integer.parseint string 或 i integer.parseint string int radix 2 int i integer.valueof my str intvalue 注 字串轉成 ...

切換IP的多種方法

ip 位址是網際網路協議特有的一種位址,我們在使用網際網路的時候,每個網路會自動給每個主機分配乙個邏輯位址,簡單來說,ip位址就想我們 號碼,通過ip位址就能知道使用者的所在地?1.手機流量更換ip 飛行模式開啟,時間大概是幾秒鐘,再次關閉,手機ip位址已經更改。路由器換ip 3.寬頻撥號更換ip ...

PHP快取技術的多種方法

普遍快取技術 資料快取 這裡所說的資料快取是指資料庫查詢php快取機制,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。用的最廣的例子看discuz的搜尋功能,把結果id快取到乙...