Проект Gradle для курса Java-Advanced
Table of Contents
Гайд на основе того, как я собрал проект для сдачи домашних заданий на курсе java-advanced.
Предисловие
Делегируя настройку проекта графическому интерфейсу idea, меня не покидало чувство, что что-то важное происходит под капотом. А я люблю, чтобы вся логика была расписана в тексте – в виде билдов/конфигов/скриптов. Если вам близки такие интенции, то, возможно, вам понравится этот способ сборки проекта для сдачи дз с помощью Gradle
.
Гайд чисто практический, я освоил Gradle лишь постольку, поскольку этого требует курс java. Поэтому критика приветствуется. Как по мне, в итоге получилось сильно проще, чем копаться GUI.
Установка Gradle
Посмотрите как установить gradle на вашу ОС, с этим не должно возникнуть проблем. Приведу несколько примеров, но в дальнейшем установка будет ориентирована на Linux.
Arch
sudo pacman -S gradle
Ubuntu
sudo apt update sudo apt install gradle
MacOS
С помощью Homebrew.
brew install gradle
Windows
Следуйте официальной инструкции на сайте.
Инициализация проекта
Создайте директорию для проекта и перейдите в неё:
mkdir java-advanced
cd java-advanced
Инициализируйте проект:
gradle init
Далее вам предложат выбрать опции, я предлагаю такие:
- Select type of build to generate – Basic
- Project name – Нажмите Enter, чтобы выбрать дефолтное
- Select build script DSL – Groovy
- Generate build using new APIs and behavior – no
Появится такая структура файлов и директорий:
.
├── build.gradle
├── gradle
│ ├── libs.versions.toml
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
Клонирование репозиториев
В корне проекта создайте директории:
shared/
– Для тестовsolutions/
– Для ваших решений
Сделать можно одной командой:
mkdir shared solutions
Склонируйте в shared/ репозиторий с тестами (git у вас, думаю, есть):
git clone https://www.kgeorgiy.info/git/geo/java-advanced-2025.git shared
Склонируйте в solutions/ ваш персональный репозиторий:
git clone https://www.kgeorgiy.info/git-students/year2023/<USER>/java-advanced solutions
Вместо <USER> – свой юзернейм, также git попросит ввести свой юзернейм и пароль.
Конфигурация build.gradle
Заходим в build.gradle
в корне проекта с помощью любимого редактора/IDE. Удаляем комментарии, которые там есть, вставляем этот код:
plugins { id 'java' } group = 'org.example' version = '1.0-SNAPSHOT' repositories { mavenCentral() flatDir { dirs 'shared/lib' } } dependencies { implementation fileTree(dir: 'shared/lib', include: ['*.jar']) implementation files('shared/artifacts/info.kgeorgiy.java.advanced.base.jar') testImplementation files('shared/artifacts/info.kgeorgiy.java.advanced.base.jar') } sourceSets { main { java { srcDirs = ['solutions/java-solutions'] } } } def createTask(String taskName, String testName, String cutClass, String srcDir, String mainClassName) { tasks.register(taskName, JavaExec) { sourceSets.test.java.srcDirs = [srcDir] classpath = sourceSets.test.runtimeClasspath mainClass = mainClassName args testName, cutClass } } createTask("WalkTest", "Walk", "info.kgeorgiy.ja.borisov.walk.Walk", "shared/modules/info.kgeorgiy.java.advanced.walk", "info.kgeorgiy.java.advanced.walk.Tester")
Из кода несложно понять, что мы подтягиваем зависимости, указываем директорию исходников. При желании можете разобраться как работать с репозиторием maven.
Функция, с которой мы будем работать, это createTask
– она нужна для создания задач. Каждая задача конфигурирует запуск конкретных тестов для конкретного домашнего задания. Из сигнатуры функции понятно, что для запуска тестов нам нужно:
- Имя, по которому мы в дальнейшем будем запускать задачу (taskName)
- Название модификации (testName). Его нужно менять, если хотите запустить другой вариант
- Тестируемый класс (cutClass)
- Директория с тестами (srcDir)
- Тестирующий класс (mainClassName)
Обратите внимание, что директорию исходников (java-solutions), мы указывали ранее, а директории тестов меняются от дз к дз, поэтому их мы указываем динамически в функции.
И, последнее, вызываем функцию createTask
с нужными нам параметрами, тем самым регистрируя задачу для тестирования. Для примера, как создать задачу для дз Walk:
createTask("WalkTest", "Walk", "info.kgeorgiy.ja.borisov.walk.Walk", "shared/modules/info.kgeorgiy.java.advanced.walk", "info.kgeorgiy.java.advanced.walk.Tester")
Тесты для других домашних заданий делаются по аналогии и добавляются в конец файла build.gradle.
Билд и запуск
Сборка проекта:
./gradlew clean build
Запуск тестов выполняется с передачей названия задачи, которую мы создали. То есть WalkTest:
./gradlew WalkTest
Заключение
Я повторил все шаги с нуля, у меня всё работает. Прежде чем идти на сдачу, убедитесь, что вы понимаете как всё работает. Я всего лишь поделился тем, как собираю проект.