Как указано в maven документации для предоставленной области:
Это очень похоже на компиляцию, но указывает, что вы ожидаете, что JDK или контейнер предоставят зависимость во время выполнения.Например, при создании веб-приложения для Java Enterprise Edition вы должны установить зависимость от API-интерфейса сервлета и связанных API-интерфейсов Java EE, так как веб-контейнер предоставляет эти классы.Эта область доступна только для пути к классам компиляции и тестирования и не является транзитивной.
Там уже упоминался один вариант использования: при создании приложения JavaEE, которое впоследствии вы хотите развернуть в приложении JavaEEСервер Сервер приложений обеспечивает реализацию javaEE.
Таким образом, чтобы сказать maven, что вам нужна эта зависимость во время компиляции, но не упакованная в проект позже, вы должны использовать предоставляемую область видимости как:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
Еще один вариант использования - при создании приложения JavaEE, в котором используются разные типы контейнеров.Существует JavaEE EJB и веб-контейнер , и вам нужно убедиться, что ваши классы не будут упакованы / загружены в неправильный контейнер или даже загружены в оба контейнера, поскольку это может вызвать всевозможные проблемыдля вашего приложения и загрузчиков классов.
Допустим, вы создаете приложение, которое содержит как модуль EJB, так и веб-модуль, и вы хотите, чтобы ваши EJB работали в контейнере EJB.Вы также хотите использовать свои EJB-компоненты в веб-модуле.Поскольку EJB-компоненты выполняются в контейнере EJB, а веб-модуль выполняется в веб-контейнере, вы не можете просто добавить EJB-зависимость с компиляцией области в ваш веб-проект.Потому что, если вы это сделаете, maven упакует ejb в файл war, а EJB окажется в веб-контейнере.
Таким образом, в вашем веб-приложении вы добавите зависимость как
<artifactId>my-web</artifactId>
<packaging>war</packaging>
<dependency>
<groupId>your.group</groupId>
<artifactId>my-ejb</artifactId>
<type>ejb</type>
<scope>provided</scope>
</dependency>
Таким образом, вы сообщаете maven, что вы хотите использовать свой модуль EJB, но он не должен упаковать его в ваш war-файл и что вы сами убедитесь, что этот модуль доступен во время выполнения.