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

Что такое сборка приложения?

1.0 Junior🔥 251 комментариев
#Основы Java

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

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

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

Сборка приложения

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

Основные этапы сборки

1. Компиляция (Compilation)

Преобразование Java-кода в байт-код (класс-файлы):

javac src/Main.java -d bin/
# Результат: bin/Main.class

2. Управление зависимостями (Dependency Management)

Загрузка необходимых библиотек из репозиториев:

<!-- Maven pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>3.0.0</version>
</dependency>

3. Запуск тестов (Testing)

mvn test  # Компиляция и запуск тестов

4. Упаковка (Packaging)

Создание архива (JAR, WAR, EAR):

jar cf myapp.jar *.class

5. Выполнение дополнительных действий

Генерация документации, статический анализ кода, создание Docker образов и т.д.

Инструменты сборки

1. Maven

Основной инструмент сборки на основе конфигурации (convention over configuration):

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0</version>
    
    <dependencies>
        <!-- Зависимости -->
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

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

mvn clean          # Удалить артефакты
mvn compile        # Компилировать
mvn test           # Запустить тесты
mvn package        # Создать JAR/WAR
mvn install        # Установить в локальный репозиторий
mvn deploy         # Развернуть в удалённый репозиторий

2. Gradle

У modern, гибкий инструмент на основе Groovy/Kotlin DSL:

plugins {
    id java
}

group = com.example
version = 1.0.0

repositories {
    mavenCentral()
}

dependencies {
    implementation org.springframework.boot:spring-boot-starter-web:3.0.0
    testImplementation junit:junit:4.13.2
}

tasks.named(compileJava) {
    options.release = 11
}

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

./gradlew build        # Собрать проект
./gradlew clean        # Очистить
./gradlew test         # Запустить тесты
./gradlew jar          # Создать JAR
./gradlew bootRun      # Запустить Spring Boot приложение

3. Ant

Старый инструмент, основанный на XML-конфигурации (менее популярен в современных проектах):

<project name="myapp" default="jar">
    <target name="compile">
        <javac srcdir="src" destdir="bin"/>
    </target>
    
    <target name="jar" depends="compile">
        <jar destfile="myapp.jar" basedir="bin"/>
    </target>
</project>

Жизненный цикл сборки (Build Lifecycle)

Maven имеет три встроенных жизненных цикла:

  1. Clean: pre-cleancleanpost-clean
  2. Default: validatecompiletestpackageverifyinstalldeploy
  3. Site: pre-sitesitepost-sitesite-deploy
mvn clean compile package
# Выполнит: clean → compile → test → package

Типы артефактов

1. JAR (Java Archive)

Запакованное приложение или библиотека:

jar tf myapp.jar  # Посмотреть содержимое
java -jar myapp.jar  # Запустить

2. WAR (Web Archive)

Для веб-приложений на Servlet контейнерах:

WAR/
├── WEB-INF/
│   ├── web.xml
│   ├── classes/
│   └── lib/
├── index.jsp
└── static/

3. EAR (Enterprise Archive)

Для enterprise приложений на Java EE:

EAR/
├── APP-INF/
├── application.xml
├── myapp.jar
└── myapp.war

Continuous Integration и Build Pipeline

В CI/CD системах (GitHub Actions, Jenkins, GitLab CI) сборка автоматизируется:

# .github/workflows/build.yml
name: Build
on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-java@v3
        with:
          java-version: 11
      - run: mvn clean package
      - run: mvn sonar:sonar  # Статический анализ

Оптимизация сборки

1. Кэширование зависимостей

<!-- Используйте локальный репозиторий -->
~/.m2/repository/

2. Параллельная компиляция

mvn -T 1C compile  # 1 поток на ядро процессора

3. Инкрементальная сборка

Гradle и Maven отслеживают изменения и пересобирают только необходимое.

4. Skip тесты (только для быстрой сборки)

mvn package -DskipTests

Лучшие практики

Делайте:

  • Используйте управление версиями зависимостей
  • Запускайте тесты в CI pipeline
  • Используйте инкрементальные сборки
  • Версионируйте артефакты
  • Создавайте воспроизводимые сборки

Не делайте:

  • Не коммитьте бинарные файлы
  • Не игнорируйте ошибки компиляции
  • Не пропускайте тесты в production
  • Не используйте SNAPSHOT версии в production

Сборка приложения — критический процесс в разработке, который должен быть быстрым, надёжным и воспроизводимым.

Что такое сборка приложения? | PrepBro