Ручная компиляции кода довольно утомительный процесс даже во время обучения. В реальных приложениях такой подход просто не применим, слишком много действий придется делать руками. Для компиляции используются специальные системы сборки, такие как Maven или Gradle. Последний стал стандартом де-факто для новых приложений, поэтому рассмотрим работу именно с ним. Принцип у всех таких систем один и тот же, поэтому зная один, несложно разобраться и в других.
Gradle — это не просто автоматизатор компиляции. Это навороченная система сборки, где компиляция это всего лишь один из этапов. Сборка проекта – довольно широкое понятие. Она включает в себя компиляцию исходного кода, упаковку в jar, запуск тестов и другие шаги, необходимые для создания рабочего приложения. Ключевые возможности Gradle:
- Автоматическая сборка проекта. Gradle сам знает какие файлы и как надо собирать. Сам компилирует, сам упаковывает в JAR
- Быстрая инкрементальная сборка. Компилируется только то, что изменилось
- Управление зависимостями. Gradle сам качает и подключает библиотеки. И заодно умеет их обновлять
Полный список возможностей огромен. Большая часть из них работает автоматически, об этом не придется думать.
В повседневной работе Java-программист пользуется Gradle через редактор, но во время обучения нужно потратить немного времени на то, чтобы разобраться с тем как он работает. Иначе потом будет сложно, когда что-то пойдет не так и возникнет ошибка. Поэтому здесь мы проделаем все операции через консоль, а дальше подключим редактор.
Начнем с установки. Если Gradle у вас не установлен, то посмотрите инструкцию. Проверить установку можно так:
gradle -v
------------------------------------------------------------
Gradle 8.4
------------------------------------------------------------
Теперь инициализируем новый Gradle-проект:
# Создаем директорию для проекта
mkdir hexlet-gradle-project
cd hexlet-gradle-project
# Запускаем инициализацию
gradle init
Дальше Gradle задаст несколько вопросов, на базе которых сформируется правильная структура. Если во время создания вы ошиблись и выбрали не тот вариант, то ничего страшного. Просто дойдите до конца и пересоздайте директорию с проектом. Потом запустите все заново. Разбираем вопросы:
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4]
Выбираем тип basic, который Gradle предлагает по умолчанию. Этот тип представляет собой базовую структуру проекта Gradle, которую дальше можно настроить и дополнить по мере необходимости
Select build script DSL:
1: Kotlin
2: Groovy
Enter selection (default: Kotlin) [1..2]
Выбираем язык для описания Gradle файлов. Kotlin DSL является выбором по умолчанию. Мы тоже будем использовать Kotlin
Project name (default: hexlet-gradle-project):
Просто жмем Enter. Текущее имя директории и есть имя проекта.
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]
Выбираем yes. После этого появляется радостная надпись:
BUILD SUCCESSFUL in 8m 46s
Посмотрим на получившуюся структуру:
tree -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:
./gradlew run
> Task :run
Hello, world! # Вот он вывод нашей программы
BUILD SUCCESSFUL in 2s
2 actionable tasks: 2 executed
Самостоятельная работа
- Установите Gradle по инструкции, если он у вас еще не установлен
- Создайте у себя на компьютере директорию hexlet-gradle-project и инициализируйте в ней Gradle проект, выполнив шаги из теории. Изучите получившуюся структуру проекта
- Запустите проект и убедитесь, что на экран выводится фраза "Hello World!"
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.