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

Что такое scope в Maven и какие бывают

1️⃣ Как кратко ответить

Scope в Maven определяет видимость и доступность зависимости в различных фазах сборки проекта. Основные виды scope: compile, provided, runtime, test, system, import.

2️⃣ Подробное объяснение темы

В Maven, системе управления проектами и сборки, scope (область видимости) определяет, как и когда зависимости доступны в проекте. Это важно для управления зависимостями, чтобы избежать конфликтов и избыточности.

Основные виды scope:

  1. Compile

    • Описание: Это значение по умолчанию. Зависимости с этим scope доступны во всех фазах сборки и во время выполнения.
    • Применение: Используется для библиотек, которые необходимы для компиляции и выполнения кода.
    • Пример: Библиотеки, которые являются частью основного кода приложения.
  2. Provided

    • Описание: Зависимости с этим scope необходимы для компиляции, но не включаются в финальный артефакт, так как предполагается, что они будут предоставлены средой выполнения (например, сервером приложений).
    • Применение: Используется для библиотек, которые предоставляются контейнером или средой выполнения.
    • Пример: javax.servlet API, который предоставляется сервером приложений.
  3. Runtime

    • Описание: Зависимости с этим scope не нужны для компиляции, но необходимы во время выполнения.
    • Применение: Используется для библиотек, которые требуются только при запуске приложения.
    • Пример: JDBC драйверы, которые необходимы для подключения к базе данных во время выполнения.
  4. Test

    • Описание: Зависимости с этим scope используются только для компиляции и выполнения тестов.
    • Применение: Используется для библиотек, которые необходимы только для тестирования.
    • Пример: JUnit или TestNG библиотеки.
  5. System

    • Описание: Похож на provided, но требует явного указания пути к JAR файлу. Не рекомендуется использовать, так как нарушает переносимость проекта.
    • Применение: Используется в редких случаях, когда зависимость не может быть загружена из репозитория.
    • Пример: Локальные JAR файлы, которые не доступны в репозиториях.
  6. Import

    • Описание: Используется только в dependencyManagement для импорта зависимостей из другого POM файла.
    • Применение: Позволяет импортировать BOM (Bill of Materials) для управления версиями зависимостей.
    • Пример: Импорт BOM файла для управления версиями Spring Boot зависимостей.

Пример использования scope в POM файле:

<dependencies>
    <!-- Зависимость с областью видимости compile -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
        <scope>compile</scope>
    </dependency>
​
    <!-- Зависимость с областью видимости provided -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
​
    <!-- Зависимость с областью видимости runtime -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
        <scope>runtime</scope>
    </dependency>
​
    <!-- Зависимость с областью видимости test -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>
  • <scope>compile</scope>: Зависимость будет доступна на всех этапах сборки и выполнения.
  • <scope>provided</scope>: Зависимость нужна для компиляции, но не будет включена в финальный артефакт.
  • <scope>runtime</scope>: Зависимость нужна только во время выполнения.
  • <scope>test</scope>: Зависимость используется только для тестирования.

Понимание и правильное использование scope в Maven помогает эффективно управлять зависимостями, минимизировать размер артефактов и избегать конфликтов версий.

Тема: Сборка и CI/CD
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки