Проект 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
Заключение
Я повторил все шаги с нуля, у меня всё работает. Прежде чем идти на сдачу, убедитесь, что вы понимаете как всё работает. Я всего лишь поделился тем, как собираю проект.