Что является результатом фазы сборки (build) в Java-проекте?

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

Ответ

Результатом фазы сборки (build) являются артефакты, готовые для развертывания и выполнения. Конкретный выход зависит от типа проекта и инструмента сборки (Maven, Gradle).

Основные артефакты:

  • Скомпилированные .class файлы (байт-код) — располагаются в директориях target/classes (Maven) или build/classes/java/main (Gradle).
  • Архивы для развертывания:
    • JAR (Java Archive) — для стандартных приложений и библиотек.
    • WAR (Web Application Archive) — для веб-приложений.
    • EAR (Enterprise Archive) — для корпоративных Java EE приложений.
  • Исполняемый (fat/uber) JAR — для Spring Boot и подобных приложений, содержит все зависимости и встроенный сервер.

Пример структуры после сборки Maven-проекта:

my-app/
└── target/
    ├── classes/                 # Скомпилированные .class файлы
    │   └── com/example/Main.class
    ├── my-app-1.0-SNAPSHOT.jar # Основной JAR-артефакт
    └── surefire-reports/       # Отчеты тестов (опционально)

В Gradle аналогичная структура создается в директории build/.