RU | EN | DE

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.