Добрый день!
Давайте рассмотрим сегодня такую полезную фичу грейдла, как wrapper task
.
Данная штука позволяет не тратить время на поиск, скачивание и установку нужной версии грейдла, что существенно упрощает жизнь любого, кто хочет собрать проект, не зависимо от платформы.
Как это работает?
По умолчанию, грейдл содержит в себе задачу с именем wrapper, которая генерирует скрипты для скачивания и установки заданной версии грейдла (по дефолту эта версия равна установленной в системе). В дальнейшем, эти скрипты используются везде, где бы мы использовали команду gradle.
Для её запуска необходимо выполнить gradle wrapper, после чего корневая директория проекта будет содержать следующие файлы:
├── build.gradle
├── settings.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat
Здесь - gradlew
и gradlew.ba
- те самые скрипты, которые заменяют нам gradle. Именно с ними и надо дальше работать. gradle-wrapper.jar
- маленькое приложение для скачивания нужной версии грейдла, gradle-wrapper.properties
- файл для конфигурации нашего враппера.
Все эти файлы необходимо закоммитить (и джарник тоже). После этого любой человек, который захочет собрать проект, сможет сделать это просто выкачав репозиторий и сделав ./gradlew build. Скачивание нужной версии грейдла произойдёт автоматически.
Для задания необходимой версии можно выполнить либо gradle --gradle-version=5.1.1
, либо в build.gradle задать параметр wrapper.gradleVersion='5.1.1'
.
Кроме того, можно сменить её через сам враппер, выполнив ./gradlew --gradle-version=5.1.1
Однако, вы можете столкнуться с довольно неприятной проблеммой, когда грейдл отказывается выполнять wrapper задачу из-за того, что какой-нибудь плагин не совместим с текущей версией грейдла. Казалось бы, что данная таска и придумана для того, чтобы с этим бороться, но, увы, она не работет.
Обойти эту проблему можно следующим образом - создать отдельный gradle проект, настроить и выполнить там gradle wrapper, а затем скопировать файлы, полученные после выполнения, в нужный проект и работать уже используя gradlew.
На этом мой мини-обзор такой полезной штуки окончен)