Вопрос проверяет знание всех областей видимости (scope) зависимостей в Maven, включая provided, system и import, и понимание их практического применения.
Помимо стандартных compile, test и runtime, Maven предоставляет scope: provided, system и import. Каждый из них определяет, на каком этапе сборки зависимость доступна и будет ли она включена в итоговый артефакт.
Scope provided указывает, что зависимость требуется для компиляции, но не должна упаковываться в итоговый JAR/WAR, так как предполагается, что её предоставит среда выполнения (например, сервлет-контейнер, такой как Tomcat, или JDK). Это позволяет избежать дублирования библиотек и конфликтов версий.
Пример: при разработке веб-приложения на Java Servlet API обычно указывают scope provided, так как сервлет-контейнер уже содержит эту библиотеку.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>Scope provided применяется для библиотек, которые уже есть в среде выполнения, чтобы уменьшить размер артефакта и избежать конфликтов. Это стандартная практика для сервлетов, JSP и других API, предоставляемых контейнером.