配置 tasks

2018-07-01 16:11 更新

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

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

build.gradle

task myCopy(type: Copy)

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

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

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

build.gradle

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

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

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

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

build.gradle

task myCopy(type: Copy)

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

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

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

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

build.gradle

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

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

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號