gradle
Эффективность колышков
Поиск…
Профилирование сборки
Прежде чем приступить к настройке сборки Gradle для производительности, вы должны установить базовый уровень и выяснить, какие части сборки занимают больше всего времени. Для этого вы можете профилировать свою сборку , добавив аргумент --profile
в команду Gradle:
gradle --profile
./gradlew --profile
После завершения сборки вы увидите отчет профиля HTML для сборки в ./build/reports/profile/
, выглядя примерно так:
Нажав на вкладки рядом с « Сводкой» , вы увидите более подробную разбивку времени, в которое было потрачено время.
Настройка по требованию
Если профилирование вашей сборки показывает значительные затраты времени на настройку проектов , опция «Настройка по требованию» может повысить вашу производительность.
Вы можете включить режим Configure on Demand, $GRADLE_USER_HOME/.gradle/gradle.properties
( ~/.gradle/gradle.properties
по умолчанию) и установив org.gradle.configureondemand
.
org.gradle.configureondemand=true
Чтобы включить его только для конкретного проекта, отредактируйте файл gradle.properties
этого проекта.
Если параметр «Настроить по требованию» включен, вместо того, чтобы настраивать все проекты спереди, Gradle будет настраивать только проекты, которые необходимы для выполняемой задачи.
Из руководства Gralde :
Режим конфигурации по требованию пытается сконфигурировать только проекты, которые имеют отношение к запрошенным задачам, т.
build.gradle
Он выполняетbuild.gradle
файлbuild.gradle
проектов, участвующих в сборке. Таким образом, время конфигурации большой многопроектной сборки может быть уменьшено. В долгосрочной перспективе этот режим станет режимом по умолчанию, возможно единственным режимом для выполнения сборки Gradle.
Настройка параметров использования памяти JVM для Gradle
Вы можете установить или увеличить пределы использования памяти (или другие аргументы JVM), используемые для построения Gradle и Gradle Daemon, путем редактирования $GRADLE_USER_HOME/.gradle/gradle.properties
( ~/.gradle/gradle.properties
по умолчанию) и установки org.gradle.jvmargs
.
Чтобы настроить эти ограничения только для конкретного проекта, отредактируйте файл gradle.properties
этого проекта.
Параметры использования памяти по умолчанию для Gradle builds и Gradle Daemon:
org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=256m
Это позволяет общее максимальное распределение памяти (размер кучи) 1 ГБ и максимальное распределение памяти для постоянных «внутренних» объектов размером 256 МБ. Когда эти размеры достигнуты, происходит сборка мусора, которая может значительно снизить производительность.
Предполагая, что у вас есть запасная память, вы можете легко удвоить их так:
org.gradle.jvmargs=-Xmx2024m -XX:MaxPermSize=512m
Обратите внимание, что вы перестанете видеть выгоду от увеличения XX:MaxPermSize
раньше, чем при увеличении Xmx
.
Использование демона Gradle
Вы можете включить Gradle Daemon для повышения производительности ваших сборников.
Gradle Daemon поддерживает инициализацию и запуск Gradle Framework и кэширует данные проекта в памяти для повышения производительности.
Для единой сборки
Чтобы включить Daemon для одной сборки, вы можете просто передать --daemon
аргумент вашей gradle
команды или Gradle Упаковочный сценария.
gradle --daemon
./gradlew --daemon
Для всех проектов проекта
Чтобы включить Daemon для всех построек проекта, вы можете добавить:
org.gradle.daemon=true
В файл gradle.properties
вашего проекта.
Для всех сборщиков
Чтобы включить Gradle Daemon по умолчанию, для каждой сборки, сделанной вашей учетной записью пользователя в вашей системе, по $GRADLE_USER_HOME/.gradle/gradle.properties
( ~/.gradle/gradle.properties
) и добавьте эту строку:
org.gradle.daemon=true
Вы также можете сделать это в одной команде в системах Mac / Linux / * nix:
touch ~/.gradle/gradle.properties && echo "org.gradle.daemon=true" >> ~/.gradle/gradle.properties
Или в Windows:
(if not exist "%USERPROFILE%/.gradle" mkdir "%USERPROFILE%/.gradle") && (echo org.gradle.daemon=true >> "%USERPROFILE%/.gradle/gradle.properties")
Отключение демона
Вы можете отключить Daemon для конкретной сборки с использованием аргумента --no-daemon
или отключить его для конкретного проекта, явно установив org.gradle.daemon=false
в файле gradle.properties
проекта.
Остановка демона
Если вы хотите остановить процесс Daemon вручную, вы можете либо убить процесс через диспетчер задач операционной системы, либо выполнить команду gradle --stop
. Переключатель --stop
заставляет Gradle запрашивать, чтобы все запущенные процессы Daemon той же версии Gradle, используемые для запуска команды, завершались. Обычно процессы Daemon автоматически прекращают себя * через * 3 часа бездействия или меньше .
Параллельные сборки Gradle
По умолчанию Gradle запускает только одну задачу, независимо от структуры проекта. С помощью --parallel
switch вы можете заставить Gradle выполнять независимые подпроекты - те, у которых нет явных или явных зависимостей проекта между собой, - параллельно, позволяя ему запускать несколько задач одновременно, пока эти задачи находятся в разные проекты.
Для создания проектов в параллельном режиме:
gradle build --parallel
Вы также можете сделать построение параллельно по умолчанию для проекта, добавив следующий параметр в файл gradle.properties проекта:
org.gradle.parallel=true
Используйте последнюю версию Gradle
Команда Gradle регулярно работает над улучшением производительности различных аспектов сборки Gradle. Если вы используете старую версию Gradle, вам не хватает преимуществ этой работы. Попробуйте обновиться до последней версии Gradle, чтобы узнать, какое влияние это имеет. Это низкий риск, поскольку между младшими версиями Gradle нарушается очень мало вещей.
Файл свойств для оболочки Gradle можно найти в папке проекта в разделе gradle/wrapper/
и называется gradle-wrapper.properties
. Содержимое этого файла может выглядеть так:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-X.X.X.zip
Вы можете вручную изменить номер версии XXX
(текущая версия) на YYY
(более новая версия), а при следующем запуске оболочки новая версия будет загружена автоматически.