Что обычно конфигурируют в секции build файла сборки (Maven/Gradle)?

«Что обычно конфигурируют в секции build файла сборки (Maven/Gradle)?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Секция build (или её эквивалент) в файле сборки определяет процесс трансформации исходного кода в артефакт. В ней конфигурируют плагины, задачи и параметры, которые управляют компиляцией, тестированием, упаковкой и другими этапами жизненного цикла.

В Maven (pom.xml) секция <build> содержит:

<build>
    <!-- 1. Плагины -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <!-- Параметры компилятора -->
                <source>17</source>
                <target>17</target>
                <compilerArgs>--enable-preview</compilerArgs>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.7.0</version>
        </plugin>
    </plugins>
    <!-- 2. Фильтрация ресурсов и пути -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

В Gradle (build.gradle или build.gradle.kts) эквивалентная конфигурация задается в блоке plugins и tasks:

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

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

tasks.withType(JavaCompile) {
    options.compilerArgs += '--enable-preview'
}

Типичные элементы конфигурации build:

  • Плагины/задачи: Компилятор, упаковщик (jar, war), запуск тестов, статический анализ кода.
  • Параметры компиляции: Версия Java, аргументы компилятора.
  • Обработка ресурсов: Копирование и фильтрация файлов (например, .properties).
  • Кастомизация артефакта: Имя выходного JAR, манифест.