Назад к вопросам
Middle+
5
Понимаешь жизненный цикл Maven и скопы зависимостей? Что такое scope? Почему servlet-api ставят как provided?
Компании, где спрашивали
pdm
Ответ от нейросети
sobes.tech AI
В Maven жизненный цикл (lifecycle) — это последовательность фаз, которые выполняются для сборки проекта, например: validate, compile, test, package, install, deploy.
Scope (область видимости) зависимости определяет, на каких этапах сборки и выполнения она доступна:
- compile — по умолчанию, доступна на всех этапах (компиляция, тесты, выполнение).
- provided — доступна при компиляции и тестах, но не включается в итоговый артефакт, предполагается, что среда выполнения (например, сервер приложений) предоставляет эту зависимость.
- runtime — нужна только во время выполнения, не нужна при компиляции.
- test — нужна только для тестирования.
- system — похожа на provided, но требует указания пути к библиотеке вручную.
Почему servlet-api ставят как provided?
Потому что контейнер сервлетов (например, Tomcat, Jetty) уже содержит эту библиотеку. Если включить её в артефакт, может возникнуть конфликт версий или дублирование. Поэтому servlet-api указывается с provided, чтобы использовать её при компиляции, но не включать в итоговый WAR/JAR.
Пример в pom.xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>