# Quiz de la fase 0: Setup Profesional, JDK y Dominio de Maven

> 10 afirmaciones de verdadero o falso, con la respuesta explicada, sobre los días de esta fase del plan JavaMastery.

Versión interactiva: https://aprende-java.webs-economicas.es/quiz/fase-0/

## Afirmaciones

### 1. El Maven Wrapper (`mvnw`) descarga y usa la versión de Maven fijada en `.mvn/wrapper/maven-wrapper.properties`, aunque no tengas Maven instalado.

**Respuesta:** Verdadero. Para eso existe: todo el equipo y el CI compilan con la misma versión de Maven sin instalar nada.

**Para recordarlo:** Si ves `mvnw` en un repositorio, úsalo siempre en lugar de `mvn`: la versión la decide el proyecto, no tu máquina.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 2. Ejecutar `mvn package` también ejecuta las fases `compile` y `test`.

**Respuesta:** Verdadero. Lanzar una fase ejecuta todas las anteriores del ciclo `default`: validate, compile, test y package.

**Para recordarlo:** Regla: pedir una fase es pedir todas las anteriores. Para saltarte los tests existe `-DskipTests`.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 3. Una dependencia con scope `provided` se incluye dentro del JAR o WAR final.

**Respuesta:** Falso. `provided` significa que la aporta el entorno de ejecución (por ejemplo, el servidor de aplicaciones). Está al compilar, pero no se empaqueta.

**Para recordarlo:** Piensa en `provided` como «me lo da el servidor»: compilas con ello, pero no lo metes en la caja.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 4. Las dependencias con scope `test` están disponibles al compilar el código de `src/main`.

**Respuesta:** Falso. Solo existen en el classpath de `src/test`. Si el código de producción las necesita, el build falla, y eso es lo que se busca.

**Para recordarlo:** `test` vive solo en `src/test`. Si `src/main` lo necesita, el scope está mal elegido.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 5. Maven usa el JDK al que apunta `JAVA_HOME`, aunque en el `PATH` aparezca otro `java` antes.

**Respuesta:** Verdadero. El script `mvn` arranca con `JAVA_HOME` si está definido. Por eso `java -version` y `mvn -v` pueden mostrar JDK distintos.

**Para recordarlo:** Ante la duda, compara `java -version` con `mvn -v`: `mvn -v` te dice qué JDK está usando Maven.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 6. Con `<maven.compiler.release>17</maven.compiler.release>` puedes compilar con un JDK 21 y obtener bytecode compatible con Java 17.

**Respuesta:** Verdadero. `--release` fija el nivel del lenguaje, la versión del bytecode y la API del JDK disponible. Es más seguro que usar solo `source` y `target`.

**Para recordarlo:** Usa `release` en vez de `source` y `target`: además de la sintaxis, impide usar APIs de un JDK más nuevo.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 7. Si dos dependencias traen versiones distintas de la misma librería, Maven elige siempre la más alta.

**Respuesta:** Falso. Gana la más cercana en el árbol (nearest wins) y, si empatan en profundidad, la que se declaró primero. Para forzar una versión se usa `dependencyManagement`.

**Para recordarlo:** Maven no elige la más alta, elige la más cercana. Para mandar tú, fija la versión en `dependencyManagement`.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 8. `mvn dependency:tree` muestra las dependencias transitivas y qué versión de cada una ha quedado elegida.

**Respuesta:** Verdadero. Con `-Dverbose` también enseña las versiones descartadas por conflicto. Es la primera herramienta para diagnosticar un `NoSuchMethodError`.

**Para recordarlo:** Ante un `NoSuchMethodError` o un `ClassNotFoundException`, lo primero es `mvn dependency:tree`.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 9. Una dependencia con scope `runtime` no está disponible al compilar, pero sí al ejecutar y en los tests.

**Respuesta:** Verdadero. Es el caso típico de un driver JDBC: el código usa la API de `java.sql` y el driver concreto solo hace falta en ejecución.

**Para recordarlo:** `runtime` = «mi código no lo usa, pero hace falta para arrancar». El driver JDBC es el ejemplo de manual.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

### 10. `mvn clean` forma parte del ciclo de vida `default`.

**Respuesta:** Falso. Maven tiene tres ciclos de vida: `clean`, `default` y `site`. `clean` es uno propio; por eso se escribe `mvn clean verify`.

**Para recordarlo:** Recuerda los tres ciclos: `clean`, `default` y `site`. `clean` va aparte; por eso se escribe delante.

Se estudia en el [día 1: Instalación de JDK, Dominio de Apache Maven y Anatomía de Dependencias](https://aprende-java.webs-economicas.es/dias/jdk-maven-dependencias.md).

