Разница между Maven scope compile и provided заключается в том, как обрабатываются зависимости на разных этапах жизненного цикла проекта. 3
Compile — это дефолтный объём, при котором зависимости доступны во всех путях к классам проекта на всех этапах сборки. 14 Они также распространяются на зависимые проекты. 4
Provided используется для маркировки зависимостей, которые должны быть предоставлены во время выполнения JDK или контейнером. 4 Например, при сборке веб-приложения для Java Enterprise Edition с помощью этого объёма устанавливают зависимость от Servlet API и связанных API Java EE, потому что веб-контейнер предоставляет эти классы. 1 Зависимость с таким объёмом добавляется в путь к классам, используемый для компиляции и тестирования, но не в путь к классам во время выполнения. 1
Таким образом, основное различие в том, что зависимости с объёмом compile доступны во всех путях к классам, а с объёмом provided — только в путях к классам для компиляции и тестирования, при этом они не упаковываются. 5