Middle+
44
Comprenez-vous le cycle de vie de Maven et la portée des dépendances ? Qu'est-ce que scope ? Pourquoi le servlet-api est-il mis en tant que provided ?
Entreprises à qui on a demandé
pdm
Réponse de l'IA
sobes.tech IA
В 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>