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

Что является результатом сборки Building

3.0 Senior🔥 181 комментариев
#Другое

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

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

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

Что является результатом сборки (Building)

Процесс сборки (Building) в Java — это трансформация исходного кода в исполняемый артефакт. Результат сборки зависит от типа проекта и конфигурации, но основные артефакты одинаковы для всех Java приложений.

Основные результаты сборки

1. Скомпилированный байтекод (.class файлы)

Главный результат сборки — это скомпилированные Java файлы в формате .class:

// Исходный код: Person.java
public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
}

После компиляции создаётся файл Person.class, содержащий:**

  • Байтекод JVM инструкции
  • Метаинформация о классе
  • Информация о методах и полях
  • Таблицы символов

Это промежуточный формат между исходным кодом и исполнением, который может быть выполнен на любой JVM.

2. JAR файл (Java Archive)

Для распространения приложений или библиотек компилированные .class файлы упаковываются в JAR (Java Archive) файл:

# Структура JAR файла
my-app.jar
├── META-INF/
│   ├── MANIFEST.MF          # Метаданные проекта
│   └── maven/              # Maven-specific metadata
├── com/example/
│   ├── Person.class
│   ├── service/
│   │   └── PersonService.class
│   └── Main.class
├── resources/
│   ├── application.properties
│   └── config.xml
└── lib/                     # Зависимости (внутри fat JAR)
    └── dependency.jar

Примеры JAR файлов:

  • Application JAR — исполняемое приложение
  • Library JAR — библиотека для использования в других проектах
  • Fat/Uber JAR — всё в одном файле (код + зависимости)
  • Source JAR — исходный код с расширением -sources.jar
  • Javadoc JAR — документация с расширением -javadoc.jar

3. WAR файл (Web Application Archive)

Для веб-приложений результат сборки — это WAR файл:

# Структура WAR файла
my-app.war
├── META-INF/
│   └── MANIFEST.MF
├── WEB-INF/
│   ├── web.xml             # Конфигурация веб-приложения
│   ├── classes/            # Скомпилированные Java классы
│   │   └── com/example/
│   │       └── Controller.class
│   └── lib/                # Зависимости (JAR файлы)
│       ├── spring-core.jar
│       ├── spring-web.jar
│       └── dependency.jar
└── index.jsp               # Веб-страницы
└── css/
    └── style.css

WAR развёртывается на сервере приложений (Tomcat, Jetty, JBoss).

4. EAR файл (Enterprise Archive)

Для сложных enterprise приложений может быть EAR файл:

# Структура EAR файла
my-enterprise-app.ear
├── META-INF/
│   ├── MANIFEST.MF
│   └── application.xml     # Конфигурация EAR
├── app1.war                # Веб-модуль
├── app2.war                # Другой веб-модуль
└── lib/                     # Общие зависимости
    └── shared-lib.jar

Процесс сборки в деталях

Этапы сборки (Build Lifecycle)

# Maven lifecycle (например)
1. validate     — проверка проекта
2. compile      — компиляция исходного кода → .class файлы
3. test         — запуск unit тестов
4. package      — упаковка в JAR/WAR/EAR
5. install      — установка в локальный репозиторий
6. deploy       — загрузка на удаленный репозиторий

Пример Maven сборки

# Команда сборки
mvn clean package

# Результаты:
# 1. Компилятор javac преобразует:
#    src/main/java/*.java → target/classes/*.class
#
# 2. Ресурсы копируются:
#    src/main/resources/* → target/classes/*
#
# 3. Упаковка в JAR:
#    target/*.jar (готово к использованию)

Структура распакованного результата сборки

// После сборки типичного Maven проекта
target/
├── classes/                    # Скомпилированный код
│   ├── com/example/
│   │   ├── Main.class
│   │   ├── Person.class
│   │   └── service/
│   │       └── PersonService.class
│   └── application.properties  # Ресурсы
├── test-classes/              # Скомпилированные тесты
│   └── com/example/
│       └── PersonServiceTest.class
├── my-app.jar                 # Упакованный артефакт
├── my-app-sources.jar         # Исходный код
└── my-app-javadoc.jar         # Документация

Содержимое .class файла

// Что находится в файле Person.class:
// 1. Магическое число (0xCAFEBABE)
// 2. Версия Java (major + minor version)
// 3. Constant Pool (таблица констант)
// 4. Информация о классе (флаги, родитель, интерфейсы)
// 5. Поля (fields) с метаданными
// 6. Методы (methods) с байтекодом инструкциями
// 7. Атрибуты (attributes)
// 8. Таблица символов

// Пример байтекода (из javap -c Person.class):
// public java.lang.String getName();
//   0: aload_0          // Загрузить this в стек
//   1: getfield         // Получить поле name
//   4: areturn          // Вернуть результат

Дополнительные артефакты сборки

Metadata (Метаданные)

В META-INF/MANIFEST.MF содержится информация о приложении:

Manifest-Version: 1.0
Created-By: 11.0.15 (OpenJDK)
Main-Class: com.example.Main          # Точка входа для запуска
Class-Path: lib/dependency.jar        # Путь к зависимостям
Implementation-Title: my-app
Implementation-Version: 1.0.0
Build-Jdk: 11.0.15

Модули (Java 9+)

Если используется модульная система:

# Файл module-info.class содержит описание модуля
module-info.class содержит:
- Имя модуля
- Требуемые модули
- Экспортируемые пакеты
- Предоставляемые сервисы

Использование результатов сборки

Исполнение приложения

# Исполнение JAR файла
java -jar my-app.jar

# С параметрами
java -Xmx1g -jar my-app.jar --arg1=value1

# Исполнение конкретного класса
java -cp target/classes com.example.Main

Использование библиотеки

<!-- pom.xml -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-library</artifactId>
    <version>1.0.0</version>
</dependency>

Spring Boot специфика

Для Spring Boot приложений результат может быть:fat JAR (всё в одном):

mvn clean package

# Результат: my-app-1.0.0.jar (100+ MB)
# Содержит:
# - скомпилированный код
# - все зависимости
# - встроенный Tomcat сервер
# - конфигурационные файлы

# Исполнение:
java -jar my-app-1.0.0.jar

Gradle специфика

# Gradle сборка
./gradlew build

# Результаты в build/ директории
build/
├── classes/java/main/*.class
├── resources/main/*
├── libs/my-app.jar
└── reports/
    └── tests/

Заключение

Результаты сборки Java проекта:

  1. Скомпилированный байтекод (.class файлы) — основной артефакт
  2. JAR файл — упакованное приложение или библиотека
  3. WAR файл — веб-приложение для сервера
  4. EAR файл — enterprise приложение
  5. Метаданные (MANIFEST.MF) — конфигурация артефакта
  6. POM/Gradle metadata — информация о сборке

Эти артефакты могут быть распространены, установлены как зависимости, развёрнуты на серверы или исполнены напрямую.