1. Maven
📂 Структура проекта (Standard Directory Layout)
mavenstructure.jpeg

📄 Минимальный pom**.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
<spring.boot.version>3.2.0</spring.boot.version>
</properties>
<dependencies>
<!-- Starter Web (Spring MVC, Tomcat, Jackson) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JUnit 5 + Mockito -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Запуск Spring Boot через mvn spring-boot:run -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>🔧 Основные команды Maven
mvn clean # очистка target/
mvn compile # компиляция java
mvn validate # Проверяет структуру проекта, наличие всех нужных файлов
mvn test # запуск тестов
mvn test-compile # Компилирует тестовый код (src/test/java)
mvn package # сборка jar/war в target/
mvn install # установка артефакта в локальный репозиторий (~/.m2)
mvn deploy # Отправка артефакта в удалённый репозиторий
# (Nexus, Artifactory)
mvn site # Генерация сайта с документацией проекта
mvn verify # Запуск интеграционных тестов и проверок качества кода
mvn dependency:tree # дерево зависимостей (очень полезно!)
mvn dependency:list # Список всех зависимостей проекта
mvn dependency:analyze # Показывает неиспользуемые и недекларированные зависимости
mvn help:effective-pom # Выводит финальный POM с учётом наследования и профилей
mvn versions:display-dependency-updates # Показывает доступные новые версии
# зависимостей
mvn archetype:generate # Создаёт новый проект из шаблона (archetype)
###############
# Spring Boot #
###############
mvn spring-boot:run # запуск Spring Boot приложения
mvn clean spring-boot:run # Сначала очищает target, потом запускает.
mvn package spring-boot:repackage # Упаковывает и затем «перепаковывает» JAR/WAR # в исполняемый fat/uber JAR со встроенным
# лаунчером.
mvn spring-boot:repackage # Только «перепаковать», если package уже
# сделан.
mvn spring-boot:build-image # Собирает **OCI-образ** контейнера через
# Cloud Native Buildpacks (Paketo), без
# Dockerfile.
mvn spring-boot:start # Поднимает приложение в фоне для
# интеграционных тестов
mvn spring-boot:stop # Останавливает приложение, запущенное start.
mvn spring-boot:build-info # Генерирует META-INF/build-info.properties
# (версия, время сборки и т.п.) для
# /actuator/info.
mvn spring-boot:process-aot # AOT-подготовка кода (Boot 3.x): генерирует
# вспомогательные классы для ускорения
# старта/минимизации рефлексии.
mvn spring-boot:process-test-aot # AOT для тестов.
mvn spring-boot:help -Ddetail=true # Справка по целям плагина и их параметрам.
###############
# SONAR #
###############
mvn clean verify sonar:sonar -Dsonar.projectKey=clavionx-web -Dsonar.projectName='Сlavionx' -Dsonar.host.url=http://localhost:9000 -Dsonar.token=sqp_3606ea94664b701db82c3a1b3c0ad9b8a0ffecfc
mvn clean verify sonar:sonar -Psonar
📄 Профили Maven Используются для переключения окружений (dev/test/prod).
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>Запуск:
mvn spring-boot:run -Pdev📌 Полезные плагины Maven
<build>
<plugins>
<!-- Code quality: Checkstyle -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<!-- Unit-тесты -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
</plugins>
</build>2. Gradle
📂 Структура проекта
Такая же, как у Maven (src/main/java, src/test/java).
Файл конфигурации: build.gradle (Groovy DSL) или build.gradle.kts (Kotlin DSL).
📄 Минимальный build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'com.example'
version = '1.0.0'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}🔧 Основные команды Gradle
gradle clean # очистка build/
gradle build # сборка jar
gradle test # запуск тестов
gradle bootRun # запуск Spring Boot
gradle dependencies # показать зависимости📄 Профили Spring в Gradle В application.properties/application.yml указываем профили:
spring.profiles.active=devЗапуск с профилем:
gradle bootRun --args='--spring.profiles.active=prod'📌 Полезные Gradle плагины
plugins {
id 'checkstyle' // стиль кода
id 'jacoco' // тестовое покрытие
}3. Отличия Maven vs Gradle
| 🛠️ Характеристика | Maven (pom.xml) | Gradle (build.gradle) |
|---|---|---|
| Язык конфигурации | XML (жёсткий) | Groovy/Kotlin DSL (гибкий) |
| Кривая обучения | Низкая | Выше (нужно знать DSL) |
| Скорость | Медленнее | Быстрее (кеширование, параллельность) |
| Кастомизация | Ограничена | Очень гибкая |
| Популярность | Доминирует | Быстро растёт |
| Где чаще встречается | Spring Boot проекты, банки, госструктуры | Микросервисы, DevOps-heavy проекты |
4. Best Practices
- ✅ Используй Spring Boot Starter пакеты (они избавляют от ручного выбора зависимостей).
- ✅ Создавай профили dev/test/prod → для конфигов, логирования, БД.
- ✅ В больших проектах: Gradle (ускоряет CI/CD).
- ✅ Для собеседований и первых pet-проектов: Maven (проще и больше документации).
- ✅ Проверяй дерево зависимостей (mvn dependency:tree, gradle dependencies) — это спасает от конфликтов.
📌 Итог
- Maven = стандарт, простота, отличная документация.
- Gradle = гибкость, скорость, реальный выбор для современных микросервисов.
- Оба поддерживаются Spring Boot одинаково. Для входа → учи Maven. Когда освоишь — подтяни Gradle.