null

Gradle wrapper

Добрый день!

Давайте рассмотрим сегодня такую полезную фичу грейдла, как 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.

 

На этом мой мини-обзор такой полезной штуки окончен)