«1. Обзор

Gradle обычно используется разработчиками для управления жизненным циклом сборки проекта. Это инструмент сборки по умолчанию для всех новых проектов Android.

В этом уроке мы узнаем о Gradle Wrapper, сопутствующей утилите, упрощающей распространение проектов.

2. Gradle Wrapper

Чтобы создать проект на основе Gradle, нам нужно установить Gradle на нашу машину. Однако, если наша установленная версия не совпадает с версией проекта, мы, вероятно, столкнемся со многими проблемами несовместимости.

Gradle Wrapper, также сокращенно Wrapper, решает эту проблему. Это скрипт, который запускает задачи Gradle с объявленной версией. Если заявленная версия не установлена, Wrapper устанавливает требуемую.

Основные преимущества Wrapper заключаются в том, что мы можем:

    Создать проект с помощью Wrapper на любом компьютере без необходимости предварительной установки Gradle Иметь фиксированную версию Gradle. Это дает многократно используемые и более надежные сборки на конвейерах CI. Легко обновите до новой версии Gradle, изменив определение Wrapper

В следующих разделах мы будем запускать задачи Gradle, требующие локальной установки Gradle.

2.1. Генерация файлов-оболочек

Чтобы использовать Wrapper, нам нужно сгенерировать определенные файлы. Мы создадим эти файлы, используя встроенную задачу Gradle, называемую оболочкой. Обратите внимание, что нам нужно сгенерировать эти файлы только один раз.

Теперь давайте запустим задачу оболочки в каталоге нашего проекта:

$ gradle wrapper

Посмотрим на вывод этой команды:

Давайте посмотрим, что это за файлы:

    gradle-wrapper.jar содержит код для загрузки дистрибутива Gradle, указанный в файле gradle-wrapper.properties gradle-wrapper.properties содержит свойства среды выполнения Wrapper — самое главное, версия дистрибутива Gradle, совместимая с текущим проектом, gradlew — это скрипт, который выполняется Задачи Gradle с оболочкой gradlew.bat — это пакетный сценарий, эквивалентный gradlew, для компьютеров с Windows

По умолчанию задача-оболочка создает файлы-оболочки с версией Gradle, установленной в данный момент на компьютере. При необходимости мы можем указать другую версию:

$ gradle wrapper --gradle-version 6.3

Мы рекомендуем проверить файлы Wrapper в системе контроля версий, такой как GitHub. Таким образом мы гарантируем, что другие разработчики смогут запустить проект без необходимости установки Gradle.

2.2. Запуск команд Gradle с помощью Wrapper

Мы можем запустить любую задачу Gradle с помощью Wrapper, заменив gradle на gradlew.

Чтобы вывести список доступных задач, мы можем использовать команду gradlew tasks:

$ gradlew tasks

Давайте посмотрим на вывод:

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'gradle-wrapper'.
components - Displays the components produced by root project 'gradle-wrapper'. [incubating]
dependencies - Displays all dependencies declared in root project 'gradle-wrapper'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gradle-wrapper'.
dependentComponents - Displays the dependent components of components in root project 'gradle-wrapper'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'gradle-wrapper'. [incubating]
outgoingVariants - Displays the outgoing variants of root project 'gradle-wrapper'.
projects - Displays the sub-projects of root project 'gradle-wrapper'.
properties - Displays the properties of root project 'gradle-wrapper'.
tasks - Displays the tasks runnable from root project 'gradle-wrapper'.

Как мы видим, вывод такой же, как и у нас. получить при запуске этой задачи с помощью команды gradle.

3. Распространенные проблемы

Теперь давайте рассмотрим некоторые распространенные проблемы, с которыми мы можем столкнуться при работе с Wrapper.

3.1. Глобальный .gitignore, который игнорирует все файлы JAR

Некоторые организации не позволяют разработчикам проверять файлы JAR в своей системе управления версиями. Обычно в таких проектах в глобальном файле .gitignore есть правило игнорировать все jar-файлы. Поэтому файл gradle-wrapper.jar не регистрируется в репозитории git. По этой причине задачи Wrapper не запускаются на других машинах. В таких случаях нам нужно принудительно добавить файл gradle-wrapper.jar в git:

git add -f gradle/wrapper/gradle-wrapper.jar

Точно так же у нас может быть файл .gitignore для конкретного проекта, который игнорирует файлы jar. Мы можем исправить это, либо ослабив правило .gitignore, либо принудительно добавив файл jar-оболочки, как показано выше.

3.2. Отсутствует папка-оболочка

При проверке проекта на основе оболочки мы можем забыть включить папку-оболочку, которая существует внутри папки gradle. Но, как мы видели выше, папка оболочки содержит два важных файла: gradle-wrapper.jar и gradle-wrapper.properties.

Без этих файлов мы получим ошибки при выполнении задач Gradle с Wrapper. Поэтому мы должны проверить папку-оболочку в системе контроля версий.

3.3. Удалены файлы-оболочки

«Проекты на основе Gradle содержат папку .gradle, в которой хранится кеш для ускорения выполнения задач Gradle. Иногда нам нужно очистить кеш, чтобы устранить проблемы со сборкой Gradle. Обычно мы удаляем всю папку .gradle. Но мы можем перепутать папку Gradle Wrapper с папкой .gradle и тоже удалить ее. После этого мы обязательно столкнемся с проблемами при попытке запуска задач Gradle с помощью Wrapper.

Мы можем решить эту проблему, вытащив последние изменения из источника. Кроме того, мы можем восстановить файлы Wrapper.

4. Заключение

В этом уроке мы узнали о Gradle Wrapper и его основном использовании. Мы также узнали о некоторых распространенных проблемах, с которыми мы можем столкнуться при работе с Gradle Wrapper.

Как обычно, мы можем проверить проект со сгенерированными файлами Gradle Wrapper на GitHub.