Repaso
English
Maven, Git y SDLCIntermedioVCS-05

¿Qué significan los scopes de dependencia de Maven compile, provided, runtime y test?

Opciones

  1. Son nombres de ramas usadas en un repositorio Git
  2. Build y ejecución, solo build, solo ejecución y solo tests (Opción correcta)
  3. Definen el autor y la licencia de cada librería
  4. 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.

Términos clave

Practica esta pregunta en Repaso