系列文章回顧
gradle從入門到實戰 - groovy基礎
全面理解gradle - 執行時序
之前我們講述了groovy的語法,還講述了gradle的執行時序,本篇文章講述下task的定義。
task可以理解為gradle的執行單元,實在是太重要了。根據前面的分析,gradle通過乙個個task來完成具體的構建任務,下面我們來看下task的定義。
最簡單直接,通過如下方式來定義:
task
mytask
我們執行下
renyugang$
gradle mytask
config mytask
再執行下
renyugang$
gradle clean
config mytask
可以看出,通過上述方式定義的task,括號內部的**會在配置階段執行,也就是說,只要我執行任何乙個task,那段**都會執行,因為每個task執行之前都需要進行一遍完整的配置。
但是很多時候我們並不需要寫配置**,我們想要括號內的**僅僅在執行我們的task的時候才執行,這個時候可以通過dofirst或者dolast來完成。
// 定義並配置mytask
task mytask
mytask.dolast
mytask.dofirst
執行結果如下
config mytask
before execute mytask
after execute mytask
除此之外,dolast還有乙個等價的操作leftshift,leftshift還可以縮寫為<<,因此下面的三種實現效果等價:
mytask.dolast
mytask.leftshift
mytask <<
在上面的demo中,mytask真正執行的時候啥都沒乾,它只是在執行的最開始和最後做了一些事情。
其實,通過@taskaction操作符也可以指定乙個task執行時要做的事情,它區別於dofirst和dolast,不過@taskaction平時用的較少,這裡簡單示範下:
class
rygtask
extends
defaulttask
}// hello使用了預設的message值
task hello(type
:rygtask)
// 重新設定了message的值
task hello1(type
:rygtask)
執行gradle hello hello1
hello world. this is rygtask
hello world. i am an android developer
除了上面的task定義方式以外,gradle本身還提供了一些已有的task供我們使用,比如copy、delete、sync等。因此我們定義task的時候是可以繼承已有的task,比如我們可以繼承自系統的copy task來完成檔案的拷貝操作。
task
mytask(type
: copy
)
除了這種方式以外,我們還可以通過api來動態建立task,api也有很多,這裡介紹幾個最常用的(gradle水很深,api特別靈活,大家記住最常用的就好)。
// 下面三種定義也一模一樣
task mytask <<
project.task('mytask'
).dolast
project.tasks.create('mytask'
).dolast
定義task的時候是可以指定很多引數的,如下所示:
引數含義
預設值name
task的名字
不能為空,必須指定
type
task的「父類」
defaulttask
overwrite
是否替換已經存在的task
false
dependson
task依賴的task的集合
group
task屬於哪個組
null
description
task的描述
null
在上面的例子中都沒涉及引數,下面舉個帶引數的栗子。
task
mytask1 <<
task
mytask2 <<
// 定義乙個名字為rygtask的task,屬於renyugang分組,並且依賴mytask1和mytask2兩個task。
project.task
('rygtask'
, group: "renyugang"
, description: "我自己的task"
, dependson: ["mytask1"
, "mytask2"
] ).dolast
通過gradle tasks
來檢視:
publishing tasks
----------------
bintrayupload - publishes artifacts to bintray.com.
renyugang tasks
---------------
rygtask - 我自己的task
upload tasks
------------
uploadarchives - uploads all artifacts belonging to configuration ':androidstub:archives'
嘗試執行gradle rygtask
,結果如下:
execute mytask1
execute mytask2
execute rygtask
結果不用我解釋了,相信大家都能看懂。
補充說明
最後,定義task的api很多,我介紹了最常用的部分,剩下的細節還是需要大家檢視gradle文件,其實學習gradle就是乙個查文件的過程。如下幾個文件,大家讀讀。
project api
taskcontainer api
task api
**:
全面理解Gradle 定義Task
系列文章回顧 gradle從入門到實戰 groovy基礎 全面理解gradle 執行時序 之前我們講述了groovy的語法,還講述了gradle的執行時序,本篇文章講述下task的定義。task可以理解為gradle的執行單元,實在是太重要了。根據前面的分析,gradle通過乙個個task來完成具體...
全面理解HTTP
引言 作為一名軟體工程web專業學生,對於http的熟悉掌握是必不可少的,特此做記錄,打造自己的http棧。我們經常接觸到的就是url了,它就是我們訪問web的乙個字串位址,那麼uri是什麼呢?他們是什麼關係呢?url uniform resource location 統一資源定位符 uri un...
Gradle 自定義外掛程式
官方原文 gradle學習官方翻譯 配置build.gradle 使用官方的 groovy 外掛程式 新增api依賴 dependencies 新增當前使用的gradle版本為2.1.3 dependencies 建立資源注意,紅框內的兩者名保持一致 該屬性可以在gradle中直接使用類似於andr...