Выбор ответа Senior Сборка Gradle обновлено

Фазы сборки Gradle

Вопрос

В скрипте build.gradle.kts на верхнем уровне выполняется "git rev-list --count HEAD".execute() для версии. Почему это плохо?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Он выполняется на конфигурации при каждом запуске задачи и ломает configuration cache. Скрипты сборки выполняются целиком в фазе конфигурации, даже если вы запускаете одну задачу.

Варианты ответа

  1. Git недоступен из Gradle-процесса без отдельного плагина, и сборка упадёт в CI
  2. Вызов внешнего процесса изменит версию Kotlin, с которой собирается скрипт
  3. Gradle Kotlin DSL не поддерживает метод execute() у строк, это синтаксис Groovy
  4. Он выполняется на конфигурации при каждом запуске задачи и ломает configuration cacheправильный ответ

Разбор

Скрипты сборки выполняются целиком в фазе конфигурации, даже если вы запускаете одну задачу. Внешний процесс на этом этапе добавляет задержку каждому запуску и несовместим с configuration cache без провайдеров (providers.exec). Правильно получать такие значения лениво через провайдеры или в CI передавать готовую версию. Git из Gradle вызвать можно, проблема именно в фазе и стоимости.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.