Gradle — система для автоматизации сборки приложений и сбора статистики об использовании программных библиотек, применяющая языки Groovy, Java, JavaScript, Kotlin и т. д., а также решения из фреймворков Apache Ant и Apache Maven.
Gradle написана на языках Java, Groovy и Kotlin, также поддерживает плагины на JavaScript, C++, Swift, Scala. Система распространяется как программное обеспечение с открытым исходным кодом по лицензии Apache License 2.0.
Назначение Gradle
Ручная сборка приложения для запуска на устройстве требует много времени и ресурсов. Она затягивает процесс разработки и релиза.
Чтобы ускорить его, программисты создают скрипты, автоматизирующие выполнение типовых задач. Это сокращает время сборки, но усложняет работу над командным проектом другим разработчикам.
Проблему решили системы автоматической сборки приложений. Первая — Ant — появилась в 2000 году. В 2004 году вышла Maven. Для описания сценариев сборки системы использовали язык разметки XML. Его недостаток — неконтролируемое разрастание при попытках собрать крупный многомодульный проект.
В 2006 году появилась первая версия Gradle. Она позволила решить основные проблемы:
- реализацию больших многомодульных сборок путем последовательного и параллельного выполнения основных и добавочных модулей;
- ускорение сборки за счет кеширования компонентов через общую сеть с использованием Gradle Build Cache;
- управление зависимостями, то есть подключаемыми к проекту фреймворками, библиотеками и другими компонентами;
- упрощение рабочего процесса за счет автоматизации типовых задач и веб-визуализации сборки.
Gradle использует многие решения, которые применяются в Ant и Maven. Три системы широко интегрированы друг с другом: проект, разработанный для одной из них, можно собрать в другой. Например, основным источником подключаемых внешних компонентов в Gradle является хранилище Maven.
Особенности Gradle
Использование диалекта Groove и Kotlin вместо XML
Оба объектно-ориентированных языка разработаны как дополнения к Java, используют похожий синтаксис, совместимы с теми же библиотеками и другим Java-кодом. Благодаря ему стало проще писать сценарии сборки и сравнительно быстро создавать сложные проекты.
Выполнение задач, основанное на направленных ациклических графах
В них узлы связаны не циклами, а путями, которые могут выходить из начального узла и приходить в конечный пункт различными способами. Ациклические графы оптимизируют внутреннюю объектную модель приложения и управление зависимостями, повышают гибкость сборки.
Два примера описывают выполнение одной и той же задачи:
- Maven
<dependencies> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.18.16</version> <scope>provided</scope> </dependency> </dependencies>
- Gradle
repositories { mavenCentral() } dependencies { compileOnly 'org.projectlombok:lombok:1.18.16' }
Код на Gradle проще и меньше. Разница заметна при реализации сборок с большим числом зависимостей.
Декларативный характер сборки
Разработчик просто задает цели, желаемый конечный результат, а система сама подбирает пути его достижения.
Структурирование сборки
Благодаря использованию общих принципов проектирования Gradle позволяет создать удобный, понятный и быстро реализуемый проект.
Проработанный API
Подробный и хорошо продуманный программный интерфейс упрощает отслеживание и настройку конфигурации сборки, контроль ее исполнения.
Универсальность
Система совместима с задачами Ant, инфраструктурой репозитория (сетевого хранилища) Maven и lvy, где можно опубликовать и получить зависимые компоненты. Есть также конвертеры для превращения Maven pom.xml в скрипт Gradle.
Простота миграции
Gradle легко приспосабливается к любой структуре, благодаря чему можно переносить с него и на него проекты, разработанные для других систем сборок.
Открытый код
Система распространяется по свободной лицензии Apache Software License (ASL), поэтому сторонние разработчики смогли написать множество полезных плагинов, библиотек и других компонентов. Они расширяют функционал и создают полноценную Gradle-экосистему.
Gradle Wrapper
Опция разрешает реализацию сборок, созданных в Gradle, на машинах, где система не установлена. Это упрощает непрерывную интеграцию серверов.
Гибкость языка
Groove, в отличие от жестко заданных XML-иерархий Ant и Maven, дает разработчику больше вариантов действия, позволяет оптимизировать проект.
Поддержка каскадной модели
Система сама определяет, какие компоненты дерева разработки были изменены или остались прежними. И, соответственно, какие зависящие от них задачи нужно перезапустить и обновить.
Как работает Gradle
В общем виде Gradle создает текстовый файл сценария сборки (BuildScript), состоящей из следующих компонентов:
- Project (проект). Это конечный результат работы сценария. Проект представляет собой JAR-файл, веб-приложение или zip-файл, включающий Java-архивы, созданные другими проектами. Проект может состоять как из одного модуля (одномодульный проект), так и из нескольких подмодулей (многомодульный проект). В многомодульном проекте каждый подмодуль можно рассматривать как самостоятельный Gradle-проект.
- Task (задачи). Это набор действий с проектом. Задачи могут быть связаны друг с другом. Под сборкой проекта понимается выполнение одной или нескольких связанных задач. Проект считается успешно собранным, когда выполняется задача или набор связанных задач. Как правило, результат сборки – набор артефактов, дистрибутивов, их размещение в репозитории, установка и запуск на другом компьютере в Сети.
- Dependency (зависимости). В ходе сборки могут быть использованы зависимости. Они бывают внешними и внутренними. Внешние — библиотеки, созданные разработчиками со всего мира и расположенные в репозиториях (repositories). Внутренние (подмодули в многомодульных проектах) — библиотеки, разработанные внутри текущего проекта и оформленные в виде подмодуля.
Описание проекта находится в файле build.gradle, настройки указываются в файле gradle.settings. Функциональность скрипта build.gradle может быть расширена с помощью служебного подпроекта buildSrc внутри проекта, а также подключаемых модулей — плагинов. Плагины подразделяются на встроенные и сторонние. Сторонние плагины можно найти на официальном сайте.
Как скачать и установить Gradle
Для получения дистрибутива нужно перейти на официальный сайт Gradle на страницу релизов и скачать последнюю версию.
Есть два варианта дистрибутива:
- binary-only — только двоичные файлы, достаточные для работы;
- complete — те же файлы, что и в первом варианте, плюс документация и исходный код.
Для установки достаточно распаковать содержимое zip-архива в любую доступную папку.
Чтобы запустить Gradle, нужно указать в командной строке полный путь до файла gradle (для Linux и MacOS) или gradle.bat (для Windows).
Для более простого использования можно создать переменную окружения GRADLE_HOME, указывающую путь с распакованным дистрибутивом, и добавить папку $GRADLE_HOME/bin/ (для Linux и MacOS) или %GRADLE_HOME%\bin\ (для Windows) к переменной PATH.
0 комментариев