¿Qué significan los scopes de dependencia de Maven compile, provided, runtime y test?
Opciones
- Son nombres de ramas usadas en un repositorio Git
- Build y ejecución, solo build, solo ejecución y solo tests (Opción correcta)
- Definen el autor y la licencia de cada librería
- Son los números de versión de una release de Maven
Respuesta
compile: necesaria para construir y ejecutar; provided: necesaria para construir pero la aporta el entorno de ejecución; runtime: no hace falta para compilar pero sí para ejecutar; test: solo para tests
Por qué
El scope controla cuándo está una dependencia en el classpath:
compile(por defecto): siempre, y se empaqueta.provided: disponible al compilar pero no se empaqueta, porque la aporta el servidor (por ejemplo la API Servlet en un Tomcat externo).runtime: no hace falta para compilar, sí en ejecución (por ejemplo un driver JDBC).test: solo al compilar y ejecutar tests (JUnit, Mockito).
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>Recuerda
test = solo tests; provided = la da el servidor; runtime = solo para ejecutar.