Инициализация Gradle-проекта — Java: Настройка окружения
Ручная компиляции кода довольно утомительный процесс даже во время обучения. В реальных приложениях такой подход просто не применим, слишком много действий придется делать руками. Для компиляции используются специальные системы сборки, такие как Maven или Gradle. Последний стал стандартом де-факто для новых приложений, поэтому рассмотрим работу именно с ним. Принцип у всех таких систем один и тот же, поэтому зная один, несложно разобраться и в других.
Gradle — это не просто автоматизатор компиляции. Это навороченная система сборки, где компиляция это всего лишь один из этапов. Сборка проекта – довольно широкое понятие. Она включает в себя компиляцию исходного кода, упаковку в jar, запуск тестов и другие шаги, необходимые для создания рабочего приложения. Ключевые возможности Gradle:
- Автоматическая сборка проекта. Gradle сам знает какие файлы и как надо собирать. Сам компилирует, сам упаковывает в JAR
- Быстрая инкрементальная сборка. Компилируется только то, что изменилось
- Управление зависимостями. Gradle сам качает и подключает библиотеки. И заодно умеет их обновлять
Полный список возможностей огромен . Большая часть из них работает автоматически, об этом не придется думать.
В повседневной работе Java-программист пользуется Gradle через редактор, но во время обучения нужно потратить немного времени на то, чтобы разобраться с тем как он работает. Иначе потом будет сложно, когда что-то пойдет не так и возникнет ошибка. Поэтому здесь мы проделаем все операции через консоль, а дальше подключим редактор.
Начнем с установки. Если Gradle у вас не установлен, то посмотрите инструкцию . Проверить установку можно так:
-v ------------------------------------------------------------ Gradle 8.4 ------------------------------------------------------------
Теперь инициализируем новый Gradle-проект:
# Создаем директорию для проекта mkdir hexlet-gradle-project cd hexlet-gradle-project # Запускаем инициализацию gradle init
Дальше Gradle задаст несколько вопросов, на базе которых сформируется правильная структура. Если во время создания вы ошиблись и выбрали не тот вариант, то ничего страшного. Просто дойдите до конца и пересоздайте директорию с проектом. Потом запустите все заново. Разбираем вопросы:
type of project to generate: 1: basic 2: application 3: library 4: Gradle plugin Enter selection (default: basic) [1..4]
Выбираем тип basic, который Gradle предлагает по умолчанию. Этот тип представляет собой базовую структуру проекта Gradle, которую дальше можно настроить и дополнить по мере необходимости
(default: Kotlin) [1..2]
Выбираем язык для описания Gradle файлов. Kotlin DSL является выбором по умолчанию. Мы тоже будем использовать Kotlin
(default: hexlet-gradle-project):
Просто жмем Enter. Текущее имя директории и есть имя проекта.
(some features may change in the next minor release)? (default: no) [yes, no]
Выбираем yes. После этого появляется радостная надпись:
in 8m 46s
Посмотрим на получившуюся структуру:
-a . . ├── .gitattributes ├── .gitignore ├── build.gradle.kts ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle.kts 2 directories, 9 files
Много всего, начнем по порядку.
Gradle сразу подготавливает проект к использованию через git добавив два файла .gitignore и .gitattributes. Игнорируются файлы сборки, которые попадут в директорию build и .gradle, это служебные файлы Gradle, которые он сам себе сгенерирует во время работы.
Файлы gradlew и gradlew.bat нужны для установки самого Gradle. Концепция здесь такая, Gradle во время создания проекта делает так, чтобы проект не использовал глобально установленный Gradle. Он скачивает сам себя в директорию gradle. Все команды будут запускаться через ./gradlew (в Windows ./gradlew.bat). Зачем так сделано? Так Gradle фиксирует версию. Если поменяется глобально установленная версия, то проект продолжит работать с той, с которой он работал. Меньше шансов что-то сломать, но сложнее в обновлении.
Файл settings.gradle.kts содержит различные настройки, например, там задается имя проекта. Остальное добавляется по мере развития и требований со стороны кода.
Файл build.gradle.kts – это основной файл Gradle, в котором на языке Kotlin описано то, как будет работать система сборки. Пока этот файл пустой, чуть позже мы его наполним
Далее нужно создать место, в котором будет располагаться исходный код нашего проекта. Внутри директории проекта создайте следующую файловую структуру: src/main/java/io/hexlet/example. Назначение директорий здесь следующее. Директория src (source) – место, в котором лежит весь исходный код проекта. Директория main отвечает за код проекта и дополнительные ресурсы (например, картинки). Внутри находится java, то есть тут лежит Java-код. Но подразумевается, что бывает и по-другому. И вот только внутри java начинается структура, соответствующая пакету проекта.
В директории example создайте новый Java-класс с именем App.java и добавьте туда код:
// Имя пакета // Соответствует структуре директорий внутри директории java package io.hexlet.example; public class App public static void main(String[] args) System.out.println("Hello, world!"); > >
Само приложение готово. Теперь перейдем к настройке системы сборки. Откройте файл build.gradle.kts. Именно с этим файлом придется работать больше всего, настраивая Gradle для подключения новых библиотек и их конфигурации. Добавьте туда следующий код:
plugins // Поддержка запуска из командной строки application > repositories // Подключаем автоматическая работа с репозиторием Maven Central mavenCentral() > // Для плагина application указываем главный класс приложения application // Входная точка mainClass.set("io.hexlet.example.App") >
Теперь все готово. Попробуем запустить проект, а в следующем уроке поговорим о том, как конкретно работать с Gradle:
> Task :run Hello, world! # Вот он вывод нашей программы
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
What’s new in Gradle 5.0
Gradle 5.0 is the fastest, safest, and most capable Gradle release ever.
Improved incremental compilation and incremental annotation processing build upon a solid performance foundation that already featured build caching and up-to-date checking.
Dependency constraints, dependency alignment, and version locking provide a dependency management model that is scalable and flexible.
Using the Build Scan™ service have improved dramatically with new performance, dependency management, logging, and deprecated API use inspections.
A statically-typed Kotlin DSL brings a breath of fresh air to our IDE users by providing code completion, refactoring, and other IDE assistance when authoring build logic.
We’ve broken down the major improvements in recent releases into the following categories:
- Faster builds
- Fine-grained transitive dependency management
- Writing Gradle build logic
- More memory efficient Gradle execution
- New Gradle invocation options
- New Gradle task and plugin APIs
Finally, you can read how to upgrade to Gradle 5.0 further on.
Faster builds
Slow builds waste a lot of money. Building only what you need by using the new build cache and incremental processing features in Gradle 5.0 will make developers and business executives happy.
Your builds will already be a bit faster immediately after upgrading to Gradle 5.0, and you can improve their performance further by using and configuring the other features described in this section.

Build caching
Avoiding work by reusing the results of previous executions makes Gradle fast. Gradle 4.0 introduced the build cache, whose purpose is to reuse outputs from any previous invocation of Gradle.
Today, the plugins for Android, Kotlin, C++, Scala, and many other plugins have made tasks cacheable and thus reusable across different machines. Effective use of the build cache has been found to reduce build times by up to 90%.
Furthermore, the build cache in Gradle 5.0 is also enabled in more scenarios, such as when a task declares a Collection of @OutputDirectories or @OutputFiles .


Expanded and interactive gradle init
Users wanting to create new Gradle builds have additional project types to choose from: kotlin-library and kotlin-application . Additionally, you can choose to generate Groovy or Kotlin DSL build scripts, and customize the project name and package. Finally, a new interactive UI makes the experience especially pleasant.

More memory efficient Gradle execution
Features like —fail-fast for tests and command-line arguments for JVM apps allow for better dev workflows, while lower memory requirements and cache cleanup reduce Gradle’s overhead on your system.
Lower memory requirements
Not only will your builds be faster just by upgrading, but they’ll also use significantly less memory. Many caching mechanisms have been optimized in Gradle 5.0, and as a result the default maximum memory for Gradle processes has been greatly reduced.
| Process Type | Gradle 4.x default heap | Gradle 5.0 default heap |
|---|---|---|
| Command-line client | 1 GB | 64 MB |
| Gradle Daemon | 1 GB | 512 MB |
| Worker processes | 1/4 of physical memory | 512 MB |
Periodic Gradle cache cleanup
The days of manually cleaning up gigabytes of old Gradle caches are over. Gradle now cleans up stale caches periodically. Gradle also tracks stale task outputs more precisely, and cleans them up in cases where not doing so could lead to incorrect results.
New Gradle invocation options
Testing
Gradle 5.0 includes support for JUnit 5: JUnit Platform, JUnit Jupiter, and JUnit Vintage. This support allows you to enable test grouping and filtering, and to include custom test engines.
test useJUnitPlatform excludeTags 'slow' includeEngines 'junit-vintage' failFast = true > >
tasks.test useJUnitPlatform excludeTags("slow") includeEngines("junit-vintage") failFast = true > >
You can use the —fail-fast flag to enable a quicker red-green cycle, which is improved further by Gradle 5.0 executing failed tests first by default.
Logging
In Gradle 5.0, log messages are now grouped by the task that generated them for non-interactive environments like continuous integration execution.
In addition to showing which tests are executing, Gradle’s rich command-line console shows a colored build status that tells you at a glance whether any have failed. You can also ask Gradle to log tasks as they execute using the “verbose” console mode.
Finally, Gradle warning logs can be summarized, silenced, or expanded by configuring the warning-mode . This will be very helpful for upgrading your build to Gradle 5.0.

Composite Builds
Composite builds allow you to include other independent projects so that you can, for instance, develop an application and a library that it depends on simultaneously.
You can now inspect composite builds using Build Scan™. Composite builds are also compatible with —continuous .
They build in parallel by default, and can now be nested.
Command-line arguments for JVM applications
Running Java applications with custom arguments gets a lot easier with Gradle 5.0 because you can simply specify them using —args on the command line or through your IDE.
New Gradle task and plugin APIs
Gradle 5.0 features many new APIs that enable faster and more versatile build logic.
Performance APIs
The new Worker API allows for safe parallel and asynchronous execution. Follow our guide to using the Worker API to enable faster builds for your custom tasks.

Improved task I/O
Properly declaring inputs and outputs is crucial for correct incremental build and build cache behavior. Gradle 5.0 enforces tighter constraints and introduces new APIs for input/output declarations that help you avoid issues of correctness.

Configuration avoidance
Some projects create lots and lots of tasks. It doesn’t make sense to configure all of them when only some will be executed. This is where Gradle 5.0’s new Configuration Avoidance APIs help. Large projects can save up to 10% of configuration time by adopting these in their custom tasks.

Publishing APIs
Gradle 5.0 introduces new APIs to improve publishing to Maven and Ivy repositories:
- Signing Plugin supports signing all artifacts of a publication.
- Configuration-wide dependency excludes are published.
- Maven Publish and Ivy Publish Plugins provide type-safe DSLs to customize POMs or Ivy modules generated as part of the publication.
Task timeouts
You can now specify a timeout duration for a task, after which it will be interrupted.
Custom CLI args
Gradle 5.0 gives you new ways to allow users to configure your custom tasks.
First and foremost, you can create custom command-line options using @Option . These can be discovered by users by executing gradle help —task your-task :
public class UrlVerify extends DefaultTask private String url; @Option(option = "url", description = "Configures the URL to be verified.") public void setUrl(String url) this.url = url; > @Input public String getUrl() return url; > @TaskAction public void verify() getLogger().quiet("Verifying URL '<>'", url); // verify URL by making a HTTP call > >
Custom Nested DSLs
Providing a custom, nested DSL for your tasks used to require use of internal APIs. Gradle 5.0 provides first-class APIs for nested DSL elements, giving you more flexibility in considering how your users configure tasks.
Gradle 5.0 provides additional API conveniences around calculated (or lazy) task inputs and outputs. This enables custom task authors to wire together Gradle models without worrying when a given property value will be known or to avoid resource intensive work during task configuration.
How to upgrade
- Upgrade to Gradle 4.10.3 using the Gradle wrapper. gradle wrapper —gradle-version=4.10.3
- Run gradle help —scan to list all use of deprecated Gradle APIs with their locations, including plugins.
- Update your Gradle plugins, especially those listed in the deprecations report from the Build Scan™.
- Upgrade to JDK 8 or higher, required to run Gradle 5.0.
- See the troubleshooting guide or reach out on the community forums if you get stuck.
You can share feedback with the Gradle team via @gradle on Twitter. Go forth and Build Happiness!
Gradle
Gradle — система для автоматизации сборки приложений и сбора статистики об использовании программных библиотек, применяющая языки Groovy, Java, JavaScript, Kotlin и т. д., а также решения из фреймворков Apache Ant и Apache Maven.

Освойте профессию «Java-разработчик»
Gradle написана на языках Java, Groovy и Kotlin, также поддерживает плагины на JavaScript, C++, Swift, Scala. Система распространяется как программное обеспечение с открытым исходным кодом по лицензии Apache License 2.0.

Назначение Gradle
Ручная сборка приложения для запуска на устройстве требует много времени и ресурсов. Она затягивает процесс разработки и релиза.
Чтобы ускорить его, программисты создают скрипты, автоматизирующие выполнение типовых задач. Это сокращает время сборки, но усложняет работу над командным проектом другим разработчикам.
Проблему решили системы автоматической сборки приложений. Первая — Ant — появилась в 2000 году. В 2004 году вышла Maven. Для описания сценариев сборки системы использовали язык разметки XML. Его недостаток — неконтролируемое разрастание при попытках собрать крупный многомодульный проект.
Профессия / 14 месяцев
Java-разработчик
Освойте востребованный язык

В 2006 году появилась первая версия Gradle. Она позволила решить основные проблемы:
- реализацию больших многомодульных сборок путем последовательного и параллельного выполнения основных и добавочных модулей;
- ускорение сборки за счет кеширования компонентов через общую сеть с использованием Gradle Build Cache;
- управление зависимостями, то есть подключаемыми к проекту фреймворками, библиотеками и другими компонентами;
- упрощение рабочего процесса за счет автоматизации типовых задач и веб-визуализации сборки.
Gradle использует многие решения, которые применяются в Ant и Maven. Три системы широко интегрированы друг с другом: проект, разработанный для одной из них, можно собрать в другой. Например, основным источником подключаемых внешних компонентов в Gradle является хранилище Maven.
Особенности Gradle
Использование диалекта Groove и Kotlin вместо XML
Оба объектно-ориентированных языка разработаны как дополнения к Java, используют похожий синтаксис, совместимы с теми же библиотеками и другим Java-кодом. Благодаря ему стало проще писать сценарии сборки и сравнительно быстро создавать сложные проекты.
Выполнение задач, основанное на направленных ациклических графах
В них узлы связаны не циклами, а путями, которые могут выходить из начального узла и приходить в конечный пункт различными способами. Ациклические графы оптимизируют внутреннюю объектную модель приложения и управление зависимостями, повышают гибкость сборки.
Два примера описывают выполнение одной и той же задачи:
Код на Gradle проще и меньше. Разница заметна при реализации сборок с большим числом зависимостей.
Декларативный характер сборки
Разработчик просто задает цели, желаемый конечный результат, а система сама подбирает пути его достижения.
Структурирование сборки
Благодаря использованию общих принципов проектирования Gradle позволяет создать удобный, понятный и быстро реализуемый проект.
Проработанный API
Подробный и хорошо продуманный программный интерфейс упрощает отслеживание и настройку конфигурации сборки, контроль ее исполнения.
Универсальность
Система совместима с задачами Ant, инфраструктурой репозитория (сетевого хранилища) Maven и lvy, где можно опубликовать и получить зависимые компоненты. Есть также конвертеры для превращения Maven pom.xml в скрипт Gradle.

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке
Простота миграции
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.
Java-разработчик
Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.
Gradle User Manual

Gradle Build Tool is a fast, dependable, and adaptable open-source build automation tool with an elegant and extensible declarative build language.
In this User Manual, Gradle Build Tool is abbreviated Gradle.
Why Gradle?
Gradle is a widely used and mature tool with an active community and a strong developer ecosystem.
- Gradle is the most popular build system for the JVM and is the default system for Android and Kotlin Multi-Platform projects. It has a rich community plugin ecosystem.
- Gradle can automate a wide range of software build scenarios using either its built-in functionality, third-party plugins, or custom build logic.
- Gradle provides a high-level, declarative, and expressive build language that makes it easy to read and write build logic.
- Gradle is fast, scalable, and can build projects of any size and complexity.
- Gradle produces dependable results while benefiting from optimizations such as incremental builds, build caching, and parallel execution.
Gradle, Inc. provides a free service called Build Scan® that provides extensive information and insights about your builds. You can view scans to identify problems or share them for debugging help.
Supported Languages and Frameworks
Gradle supports Android, Java, Kotlin Multiplatform, Groovy, Scala, Javascript, and C/C++.

Compatible IDEs
All major IDEs support Gradle, including Android Studio, IntelliJ IDEA, Visual Studio Code, Eclipse, and NetBeans.

You can also invoke Gradle via its command-line interface (CLI) in your terminal or through your continuous integration (CI) server.
Education
The Gradle User Manual is the official documentation for the Gradle Build Tool.
- Getting Started Tutorial — Learn Gradle basics and the benefits of building your App with Gradle.
- Training Courses — Head over to the courses page to sign up for free Gradle training.
Support
- Forum — The fastest way to get help is through the Gradle Forum.
- Slack — Community members and core contributors answer questions directly on our Slack Channel.
Licenses
Gradle Build Tool source code is open and licensed under the Apache License 2.0. Gradle user manual and DSL reference manual are licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.