← Назад к вопросам

С какими инструментами сборки работал

2.2 Middle🔥 51 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Инструменты сборки в Java: мой опыт

За 10+ лет я работал с тремя основными инструментами сборки: Maven, Gradle и Ant (на старых проектах). Расскажу о каждом, плюсах, минусах и где их использовать.

1. MAVEN — король корпоративных проектов

Максимум времени я провёл с Maven. Это инструмент, который определял стандарты сборки на Java на протяжении 15 лет.

Основные возможности

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>payment-service</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Payment Service</name>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <spring.boot.version>3.2.0</spring.boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

Жизненный цикл Maven

clean → validate → compile → test → package → verify → install → deploy

Основные команды:

mvn clean install          # Полная сборка с тестами
mvn clean package         # Собрать jar
mvn test                  # Только тесты
mvn clean deploy          # Отправить в репозиторий
mvn dependency:tree       # Дерево зависимостей

Плюсы Maven

Стандартная структура проекта, широкое распространение, мощная экосистема плагинов, отличное управление зависимостями, интеграция с IDE.

Минусы Maven

Многословный pom.xml, сложность кастомизации, медленнее чем Gradle, кривая обучения.

2. GRADLE — современная альтернатива

В последних трёх проектах я активно использовал Gradle. Это инструмент, который решает проблемы Maven.

Конфигурация Gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
}

group = 'com.mycompany'
version = '1.0.0'
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()
}

Основные команды

./gradlew build                # Полная сборка
./gradlew test                 # Только тесты
./gradlew bootRun              # Запустить Spring Boot
./gradlew clean                # Очистить build
./gradlew dependencies         # Дерево зависимостей

Плюсы Gradle

Groovy/Kotlin DSL, быстрее чем Maven, инкрементальная сборка, гибкая кастомизация, хорошая поддержка многомодульных проектов, Gradle Wrapper.

Минусы Gradle

Меньше примеров, не так популярен в корпорациях, требует обучения Groovy DSL.

3. ANT — наследие старого кода

В старом легаси коде (10+ лет назад) работал с Ant. Сейчас редко, но важно знать.

<?xml version="1.0" encoding="UTF-8"?>
<project name="OldProject" default="build">
    <property name="src.dir" value="src"/>
    <property name="build.dir" value="build"/>
    <target name="compile">
        <javac srcdir="${src.dir}" destdir="${build.dir}"/>
    </target>
    <target name="build" depends="compile">
        <jar destfile="myapp.jar" basedir="${build.dir}"/>
    </target>
</project>

АНТ минусы: нет управления зависимостями, очень многословный, нет стандартной структуры.

Сравнительная таблица

Maven: Стандартная структура, лучшее управление зависимостями, широко распространён Gradle: Быстрее, гибче, инкрементальная сборка, лучше для сложных проектов Ant: Полная гибкость, но много boilerplate, нет управления зависимостями

Мой выбор для новых проектов

Для корпоративных проектов: Maven — стандарт де-факто Для гибкости и скорости: Gradle — особенно для микросервисов Для микросервисов: Gradle с Spring Boot

Важные моменты

Управление версиями (Semantic Versioning):

version = '1.2.3'  (major.minor.patch)
version = '1.0.0-SNAPSHOT'  (в разработке)

Управление зависимостями: Точные версии, диапазоны версий, исключения конфликтующих библиотек.

Разные конфигурации для окружений: Dev, staging, production — разные параметры при сборке.

Самое важное — выбрать инструмент, который решает проблемы вашей команды и придерживаться его.

С какими инструментами сборки работал | PrepBro