Оглавление
Введение
Что такое Gradle?
Краткая история создания
Что содержит build.gradle
Жизненный цикл сборки
Команды
Gradle vs Maven: что выбрать для автотестов
Завершение
Введение
Если вы автоматизируете на Java или Kotlin, вы не могли не слышать о Gradle. Одни его хвалят за скорость и гибкость, другие ругают за сложность конфигурации. Что же это за инструмент и почему всё больше проектов переходят на него с Maven? В этой статье мы разберем Gradle, чтобы вы могли уверенно использовать его в своих проектах для автоматизации тестирования, а так же спокойно ответить на вопросы на собеседовании.
Что такое Gradle?
Gradle — это система автоматизации сборки, которая сочетает в себе мощь и гибкость Ant с удобством соглашений по умолчанию из Maven.
Если говорить проще, Gradle — это умный помощник, который:
Скачивает все библиотеки, которые вы подключаете в проект.
Компилирует ваш Java-код.
Запускает ваши автотесты.
Создает отчеты и упаковывает проект.
Ключевое преимущество, которое оценят QA-инженеры — Gradle использует язык программирования (Groovy или Kotlin) для файлов конфигурации, а не статический XML, как Maven. Это дает широкие возможности для создания сложных и гибких сценариев сборки, что особенно полезно в больших проектах с автотестами.
Краткая история создания

2007 год: Рождение Gradle. Проект основал Ханс Доктер (Hans Dockter) как ответ на ограничения Ant и Maven.
Основная идея: "Соглашения поверх конфигурации" (как в Maven), но с возможностью легко эти соглашения ломать и настраивать под себя с помощью настоящего языка программирования.
2013 год: Gradle стал стандартом для сборки Android-приложений, что резко подняло его популярность.
Современность: Сегодня Gradle — это выбор по умолчанию для Kotlin, активно используется в крупных Java-проектах и продолжает отбирать долю у Maven благодаря своей производительности.
Что содержит build.gradle
Главный конфигурационный файл Gradle — build.gradle — управляет всеми аспектами проекта: от зависимостей до собственных задач. В нём описаны основные блоки, которые определяют, как будет собираться и тестироваться ваш код.
Блок |
Что содержит |
Для чего нужен |
|---|---|---|
plugins |
Подключаемые плагины |
Добавляют необходимую функциональность: сборка Java-кода, запуск тестов, генерация отчётов, упаковка приложения и т.д. |
repositories |
Источники зависимостей |
Указывают, откуда Gradle будет скачивать библиотеки и плагины. |
dependencies |
Список библиотек и фреймворков |
Автоматически загружает и подключает нужные JAR-файлы для тестов и основной логики проекта. |
group |
Пространство имён проекта |
Используется для идентификации проекта при публикации или подключении как зависимости. |
version |
Текущая версия проекта |
Позволяет отслеживать изменения и управлять версиями артефактов при сборке. |
sourceCompatibility |
Версия Java, с которой компилируется проект |
Обеспечивает совместимость исходного кода с нужной версией JVM. |
tasks |
Набор встроенных и пользовательских задач |
Управляют процессом сборки, тестирования, очистки и публикации проекта. |
Пример build.gradle
plugins {
id 'java'
}
group = 'org.example'
version = '1.0-SNAPSHOT'
sourceCompatibility = '17'
dependencies {
// JUnit 5
testImplementation platform(libs.junit.bom)
testImplementation libs.junit.jupiter
testRuntimeOnly libs.junit.platform.launcher
// Библиотеки для автотестов
testImplementation libs.selenium.java
testImplementation libs.webdrivermanager
testImplementation libs.assertj.core
}
test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
showStandardStreams = true
}
}
gradle/libs.versions.toml - управление версионностью
[versions]
# Здесь храним все версии в одном месте
junit = "5.14.0"
selenium = "4.38.0"
webdrivermanager = "6.3.2"
assertj = "3.27.3"
[libraries]
# JUnit
junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit" }
# Библиотеки для автотестов
selenium-java = { module = "org.seleniumhq.selenium:selenium-java", version.ref = "selenium" }
webdrivermanager = { module = "io.github.bonigarcia:webdrivermanager", version.ref = "webdrivermanager" }
assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj" }
[bundles]
# Группы библиотек (можно подключать одной строкой)
test-dependencies = ["junit-jupiter", "selenium-java", "webdrivermanager", "assertj-core"]
settings.gradle - центральное управление репозиториями
// Настройки плагинов - откуда качать сами плагины Gradle
pluginManagement {
repositories {
gradlePluginPortal() // Главный магазин плагинов Gradle
mavenCentral() // Резервный источник
}
}
// Центральное управление репозиториями для зависимостей
dependencyResolutionManagement {
// Режим работы: запрещаем репозитории в build.gradle (чтобы все было тут)
repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
repositories {
mavenCentral() // Все библиотеки качаем отсюда
}
}
// Название нашего проекта
rootProject.name = 'autotests-project'
Жизненный цикл сборки
Gradle выполняет сборку в несколько фаз (phases), которые последовательно превращают ваши скрипты в готовый результат — будь то запуск тестов, сборка артефактов или деплой.
Жизненный цикл состоит из трёх основных этапов:

Этап |
Название |
Что происходит |
|---|---|---|
Фаза 1. Инициализация (Initialization) |
Определяется структура сборки |
Gradle обнаруживает файл |
Фаза 2. Настройка (Configuration) |
Анализируются build-скрипты |
Gradle последовательно выполняет конфигурационные блоки каждого проекта, читает файлы |
Фаза 3. Выполнение (Execution) |
Выполняются задачи |
Gradle запускает только те задачи, которые были запрошены пользователем (например, |
Таким образом, Gradle сначала понимает, что нужно собрать, затем готовит задачи, и только после этого выполняет их.
Это позволяет гибко управлять сборкой, оптимизировать время выполнения и повторно использовать результаты предыдущих запусков.
? Подробнее о жизненном цикле читайте в официальной документации Gradle — Build Lifecycle
Важно: В отличие от Maven, Gradle выполняет только те задачи, которые необходимы. Если код не менялся, Gradle не будет перекомпилировать его повторно, что и дает огромный прирост скорости.
Команды
Gradle Wrapper
Gradle Wrapper — это рекомендуемый способ работы с Gradle, который гарантирует, что все участники проекта используют одинаковую версию Gradle для сборки. Wrapper автоматически скачивает и использует правильную версию Gradle, указанную в проекте.
Основные команды:
.\gradlew— использование Gradle Wrapper на Windows./gradlew— использование Gradle Wrapper на Linux/macOS
Альтернатива: Если у вас установлен Gradle локально и добавлен в системные переменные PATH, вы можете использовать команду gradle вместо .\gradlew или ./gradlew.
Что происходит при первом запуске:
Wrapper читает версию Gradle из файла
gradle/wrapper/gradle-wrapper.propertiesСкачивает нужную версию Gradle (если её нет)
Сохраняет её в папку
~/.gradle/wrapper/Использует эту версию для всех последующих сборок
Обновление Wrapper в существующем проекте:
.\gradlew wrapper --gradle-version 9.1.0
Что создается:
Test/
├── gradlew.bat # Главный скрипт для Windows
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar # Jar-файл
│ └── gradle-wrapper.properties # Здесь прописана версия Gradle
└── build.gradle # Ваш обычный файл настройки
Команда |
Что делает |
|---|---|
|
Комбо (2 команды): очистить проект, запустить тесты, сгенерировать Allure-отчёт и сразу открыть его в браузере |
|
Запустить только Smoke-тесты по шаблону имени класса или метода |
|
Очищает проект, обновляет зависимости и пересобирает проект (полезно при проблемах с кэшем) |
|
Создать Build Scan — интерактивный отчёт о сборке с графиками и логами |
|
Завершить все активные демоны Gradle (если процесс завис или не освобождает ресурсы) |
|
Запустить тесты из классов, чьи имена содержат 'LoginTest' |
Gradle vs Maven: что выбрать для автотестов?
Давайте сравним по ключевым для QA критериям:
Вот компактная таблица с основными критериями сравнения:
Критерий |
Gradle |
Maven |
|---|---|---|
Язык конфигурации |
Groovy / Kotlin (код) |
XML (декларативный) |
Производительность |
Быстрее (инкрементальная сборка) |
Медленнее (сборка с нуля) |
Гибкость |
Высокая (можно писать свою логику) |
Ограниченная (жесткие соглашения) |
Управление зависимостями |
Version Catalogs, более умное разрешение |
Центральный pom.xml, простой подход |
Итог сравнения для QA:
Выбирайте Gradle, если вы начинаете новый проект, особенно на Kotlin, или если вам нужна максимальная скорость и гибкость для сложных сценариев запуска тестов.
Maven остается отличным и простым выбором для стандартных Java-проектов, где не требуется сверхгибкость.
Завершение
Gradle — это мощный и современный инструмент, который стоит изучить каждому QA-автоматизатору. Он может показаться сложнее Maven на первых порах, но его скорость, гибкость и растущая популярность с лихвой окупают первоначальные усилия.
Удачи в изучении и пишите стабильные автотесты
