跳過 tasks

2018-07-01 16:19 更新

Gradle 提供了好幾種跳過一個任務(wù)的方式.

1. 使用判斷條件 (predicate)

你可以使用 onlyIf() 方法來為一個任務(wù)加入判斷條件. 就和 Java 里的 if 語句一樣, 任務(wù)只有在條件判斷為真時才會執(zhí)行. 你通過一個閉包來實現(xiàn)判斷條件. 閉包像變量一樣傳遞任務(wù), 如果任務(wù)應(yīng)該被執(zhí)行則返回真, 反之亦然. 判斷條件在任務(wù)執(zhí)行之前進行判斷.

例子 15.20. 使用判斷條件跳過一個任務(wù)

build.gradle

task hello << {
    println 'hello world'
}

hello.onlyIf { !project.hasProperty('skipHello') }

gradle hello -PskipHello 的輸出

> gradle hello -PskipHello
:hello SKIPPED
BUILD SUCCESSFUL

Total time: 1 secs

2. 使用 StopExecutionException

如果想要跳過一個任務(wù)的邏輯并不能被判斷條件通過表達式表達出來, 你可以使用 StopExecutionException. 如果這個異常是被一個任務(wù)要執(zhí)行的動作拋出的, 這個動作之后的執(zhí)行以及所有緊跟它的動作都會被跳過. 構(gòu)建將會繼續(xù)執(zhí)行下一個任務(wù).

例子 15.21. 通過 StopExecutionException 跳過任務(wù)

build.gradle

task compile << {
    println 'We are doing the compile.'
}

compile.doFirst {
    // Here you would put arbitrary conditions in real life.
    // But this is used in an integration test so we want defined behavior.
    if (true) { throw new StopExecutionException() }
}
task myTask(dependsOn: 'compile') << {
   println 'I am not affected'
}

gradle -q myTask 的輸出

> gradle -q myTask
I am not affected

如果你直接使用 Gradle 提供的任務(wù), 這項功能還是十分有用的. 它允許你為內(nèi)建的任務(wù)加入條件來控制執(zhí)行. [6]

3. 激活和注銷 tasks

每一個任務(wù)都有一個已經(jīng)激活的標記(enabled flag), 這個標記一般默認為真. 將它設(shè)置為假, 那它的任何動作都不會被執(zhí)行.

例子 15.22. 激活和注銷 tasks

build.gradle

task disableMe << {
    println 'This should not be printed if the task is disabled.'
}
disableMe.enabled = false

gradle disableMe 的輸出

> gradle disableMe
:disableMe SKIPPED

BUILD SUCCESSFUL

Total time: 1 secs


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號