Ответ
Сборка приложения (build) — это автоматизированный процесс преобразования исходного кода, конфигурационных файлов, зависимостей и других артефактов в готовое к выполнению или развёртыванию программное обеспечение (исполняемый файл, пакет, артефакт).
Основные цели:
- Воспроизводимость: Исключение ручных ошибок, гарантия идентичного результата на любой машине.
- Автоматизация: Объединение множества шагов (компиляция, тестирование, упаковка) в один процесс.
- Контроль качества: Включение статического анализа, тестирования и проверок.
Типичный конвейер сборки (build pipeline) для Java-приложения:
graph LR
A[Исходный код] --> B[Компиляция]
B --> C[Выполнение тестов]
C --> D[Упаковка в JAR/WAR]
D --> E[Создание образа Docker]
E --> F[Публикация артефакта]
Ключевые этапы и инструменты:
| Этап | Задача | Инструменты (Java-экосистема) |
|---|---|---|
| Компиляция | Преобразование .java в .class байт-код. |
javac, Maven Compiler Plugin, Gradle Java Plugin. |
| Управление зависимостями | Загрузка библиотек из репозиториев. | Maven, Gradle, Ivy. |
| Тестирование | Запуск модульных и интеграционных тестов. | JUnit, TestNG, Surefire/Failsafe plugins. |
| Упаковка | Создание конечного артефакта (JAR, WAR, EAR). | Maven Jar/War plugins, Spring Boot Maven Plugin. |
| Статический анализ | Проверка качества кода, поиск уязвимостей. | SonarQube, Checkstyle, SpotBugs. |
Пример конфигурации сборки в pom.xml (Maven):
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</build>
</project>
Интеграция с CI/CD: Современные системы непрерывной интеграции (Jenkins, GitLab CI, GitHub Actions) автоматически запускают процесс сборки при каждом изменении кода в репозитории.