Gradle のタスクを除外する方法
Contents |
Introduction
Gradle でタスクを実行する時に、プラグインにより SourceSets に対して自動的に追加されるタスクなどを実行せずに除外したい場合がある。 タスクの除外の仕方について調べたことをメモ。
$ java -version
openjdk version "11.0.6" 2020-01-14 LTS
OpenJDK Runtime Environment Corretto-11.0.6.10.1 (build 11.0.6+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.6.10.1 (build 11.0.6+10-LTS, mixed mode)
$ ./gradlew --version
------------------------------------------------------------
Gradle 6.2.2
------------------------------------------------------------
Build time: 2020-03-04 08:49:31 UTC
Revision: 7d0bf6dcb46c143bcc3b7a0fa40a8e5ca28e5856
Kotlin: 1.3.61
Groovy: 2.5.8
Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM: 11.0.6 (Amazon.com Inc. 11.0.6+10-LTS)
OS: Mac OS X 10.14.6 x86_64
コード例
適当な Gradle プロジェクトを用意し、 build.gradle
に以下のようにタスクを定義する。
task checkMain {
doLast {
println "Main"
}
}
def taskNames = ["First", "Second", "Third"];
taskNames.eachWithIndex { name, i ->
task "check$name" {
doLast {
println "$name"
}
}
if (i > 0) {
tasks.getByName("check$name").dependsOn("check${taskNames[i-1]}")
}
if (i == 2) {
checkMain.dependsOn("check$name")
}
}
task checkStart {
dependsOn "checkMain"
doLast {
println "Start"
}
}
checkStart
を実行すると以下のようにジョブが実行される。
$ ./gradlew checkStart
> Task :checkFirst
First
> Task :checkSecond
Second
> Task :checkThird
Third
> Task :checkMain
Main
> Task :checkStart
Start
BUILD SUCCESSFUL in 2s
5 actionable tasks: 5 executed
このコードを例に除外する設定をおこなう。
依存も含めてそのタスクを全て除外する場合
以下の3つは全て同じ動作となり、実行するとそのタスクの依存を含めて全て除外して実行する。
settings.gradle
, build.gradle
に記載した場合プロジェクトから完全に除外される。
$ ./gradlew checkStart -x checkSecond
> Task :checkThird
Third
> Task :checkMain
Main
> Task :checkStart
Start
BUILD SUCCESSFUL in 1s
3 actionable tasks: 3 executed
コマンドラインオプションを指定する
$ ./gradlew checkStart -x checkSecond
settings.gradleに設定を書く
startParameter.excludedTaskNames= ["checkSecond”]
build.gradle に設定を書く
project.gradle.startParameter.excludedTaskNames.add("checkSecond")
一部の依存タスクのみ除外したい場合
除外ではなく正確には無効化だが、以下の2種類によって実現できる。実行すると次のようになる。
除外した checkSecond
のみがスキップされ、 checkSecond
の依存タスクである checkFirst
は実行されている。
$ ./gradlew checkStart
> Task :checkFirst
First
> Task :checkThird
Second
> Task :checkMain
Main
> Task :checkStart
Start
BUILD SUCCESSFUL in 1s
4 actionable tasks: 4 executed
タスク生成時に無効化する
tasks.whenTaskAdded { task ->
if (task.name.startsWith("checkSecond")) {
task.enabled = false
}
}
TaskExecutionGraph 作成時に無効化する
gradle.taskGraph.whenReady { graph ->
if (graph.hasTask(checkMain)) {
tasks.findByName("checkSecond").enabled(false)
}
}
参考
Gradle Official Document: Build Script Basics