Skip to main content

Build Environment

Gradle предоставляет некоторые механизмы настройки поведения самого Gradle и конкретных проектов.

Параметры Gradle можно установить в четырех разных местах:

  • Глобально - глобальные свойства применяются на уровне пользователя или системы. Целью глобальных свойств является применение общих настроек в нескольких проектах Gradle. Например, использование глобально применяемых паролей упрощает обслуживание и устраняет необходимость копирования паролей в несколько областей.

    Такие параметры хранятся в директории .gradle папки вашей учетной записи, например на Mac это ~/.gradle/gradle.properties.

  • В проекте - свойства проекта применяются ко всему проекту Gradle, например, к проекту moko-template. Используйте свойства на уровне проекта для управления поведением Gradle по всему проекту. Например, можно указать необходимые переменные, будет ли кешироваться сборка, ну или включить "отложенную конфигурацию" проекта.

    Эти параметры хранятся в gradle.properties проекта.

  • В module - "модульные" свойства применяются к одному модулю в проекте. Например, вы можете использовать свойства уровня модуля для хранения адресов доступа к api.

    Модульные параметры хранятся в gradle.properties конкретного модуля проекта, например, moko-template/android-app.

  • В командной строке, например: -Dorg.gradle.java.home, этот флаг указывает директорию используемого jdk. Флаги командной строки имеют приоритет над свойствами и переменными среды.

Файл gradle.properties состоит из пар ключ-значение параметров настройки запуска Gradle. Использование gradle.properties это альтернатива использованию флагов командной строки для конфигурации проекта.

info

Также вместо параметров в файле gradle.properties вы можете указывать переменные вашего Gradle-окружения.

Глобальные параметры

Как мы уже выяснили, файл глобальных свойств должен находиться в вашем домашнем каталоге:

  • В Windows: C:\Users\<you>\.gradle\gradle.properties
  • На Mac/Linux: ~\.gradle\gradle.properties

Следующие свойства могут быть использованы для настройки среды сборки Gradle:

  • org.gradle.caching=(true,false)

  • org.gradle.caching.debug=(true,false)

  • org.gradle.configureondemand=(true,false)

  • org.gradle.daemon=(true,false)

  • org.gradle.daemon.idletimeout=(# of idle millis)

    Прочитать об этих параметрах и найти остальные можете тут.

Параметры, объявленные глобально, будут применены для любого запущенного от текущего пользователя Gradle проекта.

Рассмотрим пример:

#   ~/.gradle/gradle.properties

# На запуск jvm будет выделено 6 GB памяти
org.gradle.jvmargs=-Xmx6g

# максимальное количество "воркеров" делаем равным трем
# по умолчанию это количество равно количеству ядер CPU
org.gradle.workers.max=3

Параметры проекта

Как мы уже выяснили, "проектные" настройки прописываются в gradle.properties, который находится в корне вашего проекта.

Там вы можете указать те же самые настройки, что и в глобальном gradle.properties.

Например, в нашем boilerplate-проекте используются такие параметры:

# выделение памяти jvm
org.gradle.jvmargs=-Xmx4096m
# параметр отложенной конфигурации
# это когда градл конфигурирует проект только в тот момент,
# когда от проекта что-то потребовалось.
# это должно ускорять работу гредла, но по факту до сих пор слабо поддерживается плагинами
org.gradle.configureondemand=false
# параллельное выполнение задач (при возможности)
org.gradle.parallel=true
# включение кеширование сборок (для ускорения)
org.gradle.caching=true

# использовать официальный стандарт кода
kotlin.code.style=official

# плагин Android будет использовать библиотеку AndroidX вместо стандартной библиотеки
android.useAndroidX=true

# отключить предупреждения о том, что технология mpp является экспериментальной
kotlin.mpp.stability.nowarn=true

# отключить предупреждение об использовании ios таргета
# из mobile-multiplatform-gradle-plugin
mobile.multiplatform.iosTargetWarning=false

# указание версии проекта для Android таргета
# версия iOS таргета меняется в другом месте
# это единственный кейс версионирования через gradle.properties
# в проекте
VERSION_NAME=0.1.0
VERSION_CODE=1

# переменная, хранящая путь до нашего xcode-проекта
xcodeproj=ios-app/ios-app.xcworkspace
important

Если рассматривать комбинирование глобальных и проектных настроек, как в данном случае пересекается параметр org.gradle.jvmargs, то в приоритете будут ваши глобальные настройки. Помните об этом!

Аналогичным образом можно завести gradle.properties для любого модуля, чтобы хранить в нем нужные вам переменные и параметры.

Флаги командной строки

Вы можете настроить многие аспекты о том, где строить сценарии, настройки, кэши и так далее, с помощью опций командной строки.

Например, установить аргументы JVM вы можете при помощи флага -Dorg.gradle.jvmargs в команде запуска вашего wrapper'а:

./gradlew build -Dorg.gradle.jvmargs= #...
important

Флаги, указанные при запуске вашего Gradle проекта через командную строку, будут приоритетнее, чем параметры, указанные как в глобальном, так и проектном gradle.properties.

Настройка окружения под себя

После данного разбора у вас должно сформироваться представление о том, как настраивать проектное и глобальное окружения.

Давайте рассмотрим, какие параметры стоит указать в глобальном gradle.properties для более комфортной работы:

org.gradle.jvmargs=-Xmx8g

При настройке этого параметра стоит учитывать количество ОЗУ на вашем устройстве и оставлять пару резервных ГБ. Например, если на устройстве у вас 16 ГБ ОЗУ, то можете спокойно выделять 8 ГБ на работу Java-машины, остальной памяти вам будет достаточно, чтобы комфортно пользоваться устройством во время сборки проекта. Если вы не будете выставлять этот параметр ни в проекте, ни глобально, то Gradle по умолчанию выставит -Xmx512m.

org.gradle.workers.max=3

При настройке этого параметра уже стоит учитывать количество ядер вашего процессора, как физических, так и виртуальных. Этот параметр указывает максимальное количество "воркеров". По умолчанию используется количество ядер вашего процессора. Например, если у вас 8 ядер, то всегда стоит оставить пару резервных для комфортного пользования остальными программами.

Указанные параметры не могут быть заданы на уровне проекта для всех, так как зависят от ПК, на котором будет производиться конкретная сборка. Важно указывать эти параметры именно в глобальных настройках, а не в проектных, чтобы не допустить деградации производительности на более слабых машинах.

Настройками глобального окружения вы как раз займетесь в нашей кодлабе на этапе "Настройка рабочего окружения".

Влияет на скорость сборки

Также сильное влияние (помимо персонализированных настроек из предыдущего пункта) на скорость сборки оказывают параметры:

  • org.gradle.parallel=true
  • org.gradle.caching=true

Данные параметры должны быть указаны в проектных настройках, чтобы они применялись у всех разработчиков.

Материалы