Выбор ответа Senior Сборка Gradle обновлено
Фазы сборки Gradle
Вопрос
В скрипте build.gradle.kts на верхнем уровне выполняется "git rev-list --count HEAD".execute() для версии. Почему это плохо?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Он выполняется на конфигурации при каждом запуске задачи и ломает configuration cache. Скрипты сборки выполняются целиком в фазе конфигурации, даже если вы запускаете одну задачу.
Варианты ответа
- Git недоступен из Gradle-процесса без отдельного плагина, и сборка упадёт в CI
- Вызов внешнего процесса изменит версию Kotlin, с которой собирается скрипт
- Gradle Kotlin DSL не поддерживает метод
execute()у строк, это синтаксис Groovy - Он выполняется на конфигурации при каждом запуске задачи и ломает configuration cacheправильный ответ
Разбор
Скрипты сборки выполняются целиком в фазе конфигурации, даже если вы запускаете одну задачу. Внешний процесс на этом этапе добавляет задержку каждому запуску и несовместим с configuration cache без провайдеров (providers.exec). Правильно получать такие значения лениво через провайдеры или в CI передавать готовую версию. Git из Gradle вызвать можно, проблема именно в фазе и стоимости.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.