Ответ 1
taskGraph.hasTask()
указывает, выполняется ли задание на графике выполнения задачи, то есть будет ли он выполняться. Поскольку график выполнения задачи создается только после фазы конфигурации, этот метод нужно вызывать из обратного вызова whenReady
(или на этапе выполнения):
gradle.taskGraph.whenReady { graph ->
if (graph.hasTask(developerBuild)) {
// do conditional configuration
}
}
Чтобы сделать это более читаемым, мы можем ввести новый метод:
def onlyFor(task, config) {
gradle.taskGraph.whenReady { graph ->
if (graph.hasTask(task)) {
project.configure(project, config)
}
}
}
Теперь мы можем написать:
onlyFor(developerBuild) { ... }
onlyFor(ciBuild) { ... }
Другой, более простой способ решить эту проблему - проверить, содержится ли конкретное имя задачи в gradle.startParameter.taskNames
. Однако это имеет два ограничения: во-первых, оно сравнивает имена задач, которые могут повлиять на многопроектные сборки. Во-вторых, он найдет только задачи, которые были указаны непосредственно (например, в командной строке), но не зависят от них.
PS: В вашем коде isDevBuild
всегда выполняется, потому что (не нулевое) замыкание true
согласно истине Groovy. (В отличие от isDevBuild()
, isDevBuild
не вызывает замыкание.)