配置 tasks

2018-07-01 16:11 更新

舉一個(gè)例子, 讓我們看一看 Gradle 自帶的 Copy task. 為了創(chuàng)建一個(gè) Copy task, 你需要在你的構(gòu)建腳本里先聲明它:

例子 15.7. 創(chuàng)建一個(gè) copy task

build.gradle

task myCopy(type: Copy)

它創(chuàng)建了一個(gè)沒有默認(rèn)行為的 copy task. 這個(gè) task 可以通過它的 API 來(lái)配置(參考 Copy). 接下來(lái)例子展示了不同的實(shí)現(xiàn)方法.

補(bǔ)充說(shuō)明一下, 這個(gè) task 的名字是 “myCopy”, 但是它是 “Copy” 類(type). 你可以有許多同樣 type 不同名字的 tasks. 這個(gè)在實(shí)現(xiàn)特定類型的所有任務(wù)的 cross-cutting concerns 時(shí)特別有用.

例子 15.8. 配置一個(gè)任務(wù) - 不同的方法

build.gradle

Copy myCopy = task(myCopy, type: Copy)
myCopy.from 'resources'
myCopy.into 'target'
myCopy.include('**/*.txt', '**/*.xml', '**/*.properties')

這個(gè)我們通過 Java 配置對(duì)象是一樣的形式. 但是你每次都必須在語(yǔ)句里重復(fù)上下文 (myCopy). 這種方式可能讀起來(lái)并不是那么的漂亮.

下面一種方式就解決了這個(gè)問題. 是公認(rèn)的最具可讀性的方式.

例子 15.9. 配置一個(gè)任務(wù) - 通過閉包 closure

build.gradle

task myCopy(type: Copy)

myCopy {
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
}

上面例子里的第三行是 tasks.getByName() 方法的一個(gè)簡(jiǎn)潔的寫法. 特別要注意的是, 如果你通過閉包的形式來(lái)實(shí)現(xiàn) getByName() 方法, 這個(gè)閉包會(huì)在 task 配置的時(shí)候執(zhí)行而不是在 task 運(yùn)行的時(shí)候執(zhí)行.

你也可以直接在定義 task 時(shí)使用閉包.

例子 15.10. 通過定義一個(gè)任務(wù)

build.gradle

task copy(type: Copy) {
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
}

請(qǐng)不要忘了構(gòu)建的各個(gè)階段.

一個(gè)任務(wù)有配置和動(dòng)作. 當(dāng)使用 << 時(shí), 你只是簡(jiǎn)單的使用捷徑定義了動(dòng)作. 定義在配置區(qū)域的代碼只會(huì)在構(gòu)建的配置階段執(zhí)行, 而且不論執(zhí)行哪個(gè)任務(wù). 可以參考第 55 章, The Build Lifecycle for more details about the build lifecycle.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)