Middle+
83
Kas te mõistad Maven'i elutsüklit ja sõltuvuste scope'i? Mis on scope? Miks servlet-api seatakse kui provided?
Ettevõtted, kust küsiti
pdm
Vastus AI-lt
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>