Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Инициализация Gradle-проекта Java: Настройка окружения

Ручная компиляции кода довольно утомительный процесс даже во время обучения. В реальных приложениях такой подход просто не применим, слишком много действий придется делать руками. Для компиляции используются специальные системы сборки, такие как Maven или Gradle. Последний стал стандартом де-факто для новых приложений, поэтому рассмотрим работу именно с ним. Принцип у всех таких систем один и тот же, поэтому зная один, несложно разобраться и в других.

Gradle — это не просто автоматизатор компиляции. Это навороченная система сборки, где компиляция это всего лишь один из этапов. Сборка проекта – довольно широкое понятие. Она включает в себя компиляцию исходного кода, упаковку в jar, запуск тестов и другие шаги, необходимые для создания рабочего приложения. Ключевые возможности Gradle:

  1. Автоматическая сборка проекта. Gradle сам знает какие файлы и как надо собирать. Сам компилирует, сам упаковывает в JAR
  2. Быстрая инкрементальная сборка. Компилируется только то, что изменилось
  3. Управление зависимостями. Gradle сам качает и подключает библиотеки. И заодно умеет их обновлять

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

В повседневной работе Java-программист пользуется Gradle через редактор, но во время обучения нужно потратить немного времени на то, чтобы разобраться с тем как он работает. Иначе потом будет сложно, когда что-то пойдет не так и возникнет ошибка. Поэтому здесь мы проделаем все операции через консоль, а дальше подключим редактор.

Начнем с установки. Если Gradle у вас не установлен, то посмотрите инструкцию. Проверить установку можно так:

gradle -v

------------------------------------------------------------
Gradle 7.3.3
------------------------------------------------------------

Теперь инициализируем новый Gradle-проект:

# Создаем директорию для проекта
mkdir hexlet-gradle-project
cd hexlet-gradle-project

# Запускаем инициализацию
gradle init

Дальше Gradle задаст множество вопросов, на базе которых сформируется правильная структура. Gradle умеет работать далеко не только с Java, поэтому одним из вопросов будет то, какой язык использовать. Если во время создания вы ошиблись и выбрали не тот вариант, то ничего страшного. Просто дойдите до конца и пересоздайте директорию с проектом. Потом запустите все заново. Разбираем вопросы:

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4]

Мы хотим создать приложение. В отличие от библиотеки, приложение можно запускать, у него есть точка входа. Библиотека же предназначена для использования в другом коде, как например Apache Commons Lang.

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift

Здесь выбираем Java.

Split functionality across multiple subprojects?:
  1: no - only one application project
  2: yes - application and library projects

Gradle умеет работать с набором связанных проектов. Такое разбиение актуально, когда из проекта выделяются библиотеки или сам проект распадается на независимые проекты. Нам достаточно одного проекта.

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2]

Сам Gradle написан на языке Groovy и для конфигурации тоже использует этот язык. Какое-то время назад появилась поддержка Kotlin. Пока выбираем Groovy в силу большей распространенности в статьях и документации.

Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]

Выбираем yes

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4]

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

Project name (default: hexlet-gradle-project):

Просто жмем Enter. Текущее имя директории и есть имя проекта.

Source package (default: hexlet.gradle.project):

Gradle предлагает выбрать пакет, внутри которого будет лежать наш проект. Тут стоит сказать, что один проект – один пакет. То же самое касается библиотек. Прямо сейчас имя не принципиально, мы не будем никуда публиковать наш код, поэтому просто соглашаемся и жмем Enter.

После этого появляется радостная надпись:

BUILD SUCCESSFUL in 8m 46s

Посмотрим на получившуюся структуру:

tree -a .
.
├── .gitattributes
├── .gitignore
├── app
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── hexlet
│       │   │       └── gradle
│       │   │           └── project
│       │   │               └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── hexlet
│           │       └── gradle
│           │           └── project
│           │               └── AppTest.java
│           └── resources
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

16 directories, 10 files

Много всего, начнем по порядку.

Gradle сразу подготавливает проект к использованию через git добавив два файла .gitignore и .gitattributes. Игнорируются файлы сборки, которые попадут в директорию build и .gradle, это служебные файлы Gradle, которые он сам себе сгенерирует во время работы.

Файлы gradlew и gradlew.bat нужны для установки самого Gradle. Концепция здесь такая, Gradle во время создания проекта делает так, чтобы проект не использовал глобально установленный Gradle. Он скачивает сам себя в директорию gradle. Все команды будут запускаться через ./gradlew (в Windows ./gradlew.bat). Зачем так сделано? Так Gradle фиксирует версию. Если поменяется глобально установленная версия, то проект продолжит работать с той с которой он работал. Меньше шансов что-то сломать, но сложнее в обновлении.

Файл settings.gradle содержит различные настройки, например, там задается имя проекта. Остальное добавляется по мере развития и требований со стороны кода.

Самое интересное находится в директории app. Сначала мы видим файл build.gradle. Это основной файл Gradle, в котором на языке Groovy описано то, как будет работать система сборки:

plugins {
    // Поддержка запуска из командной строки
    id 'application'
}

repositories {
    // Подключена автоматическая работа с Maven Central
    mavenCentral()
}

dependencies {
    // Библиотека Guava (аналог Apache Commons Lang) указана как зависимость
    implementation 'com.google.guava:guava:30.1.1-jre'
}

testing {
    suites {
        // Конфигурация тестового окружения
        test {
            // Use JUnit Jupiter test framework
            useJUnitJupiter('5.7.2')
        }
    }
}

application {
    // Входная точка
    mainClass = 'hexlet.gradle.project.App'
}

Именно с этим файлом придется работать больше всего, настраивая Gradle для подключения новых библиотек и их конфигурации.

Дальше, в этой же директории app находится src (source), место в котором лежит весь исходный код проекта. Структура здесь следующая. Директория main отвечает за код проекта и дополнительные ресурсы (директория src/main/resources), такие, как картинки, test – за тесты. Внутри каждой из них находится java, то есть тут лежит Java-код, но подразумевается, что бывает и по-другому. И вот только внутри java начинается структура соответствующая пакету проекта.

Попробуем запустить проект, а в следующем уроке поговорим о том, как конкретно работать с Gradle:

./gradlew run

> Task :app:run
Hello World! # Вот он вывод нашей программы

BUILD SUCCESSFUL in 2s
2 actionable tasks: 2 executed

Самостоятельная работа

  1. Установите Gradle по инструкции, если он у вас еще не установлен
  2. Создайте у себя на компьютере директорию hexlet-gradle-project и инициализируйте в ней Gradle проект, выполнив шаги из теории. Изучите получившуюся структуру проекта
  3. Запустите проект и убедитесь, что на экран выводится фраза "Hello World!"

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
Иконка программы Java-разработчик
Профессия
с нуля
Разработка приложений на языке Java
30 марта 10 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»