2 - Conceptos básicos

Objetivo del tema

En este tema aprenderás el modelo fundamental de Apache Maven, desde la idea de proyecto y su estructura estándar hasta los elementos que permiten ejecutar ciclos de construcción repetibles dentro del ecosistema Java.

2.1 ¿Qué es un proyecto Maven?

Un proyecto Maven es cualquier aplicación o biblioteca cuya configuración se describe en un archivo pom.xml. El POM establece dependencias, plugins, perfiles y metadatos que Maven interpreta para ejecutar tareas automatizadas.

  • Define identificadores únicos como groupId, artifactId y version que permiten publicar artefactos consistentes.
  • Incluye secciones para gestionar dependencias, configuraciones de plugins y propiedades comunes.
  • Permite reutilizar convenciones: la misma estructura funciona para aplicaciones de consola, servicios web o librerías reutilizables.

El concepto de proyecto trasciende el código fuente; abarca la forma en que se empaquetan artefactos, se ejecutan pruebas y se distribuyen resultados.

2.2 Estructura de directorios estándar en Maven

Maven adopta convenciones sobre la ubicación de archivos fuente, recursos y tests. Seguirlas evita configuraciones adicionales y permite que los plugins funcionen sin ajustes manuales.

mi-proyecto/
|-- pom.xml
|-- src/
|   |-- main/
|   |   |-- java/
|   |   |-- resources/
|   |   `-- webapp/
|   `-- test/
|       |-- java/
|       `-- resources/
`-- target/
  • src/main/java aloja el código fuente principal.
  • src/test/java contiene las clases de prueba automatizada.
  • src/main/resources y src/test/resources guardan archivos de configuración y datos auxiliares.
  • target se genera durante la construcción e incluye clases compiladas y artefactos empaquetados.

Cuando un proyecto necesita una estructura distinta, se pueden redefinir rutas mediante configuraciones de plugins, aunque la recomendación es mantener la convención para favorecer la colaboración.

2.3 El archivo pom.xml y su importancia

El POM es el contrato que describe cómo construir el proyecto. Maven lo interpreta como un documento XML jerárquico compuesto por elementos obligatorios y opcionales. Consulta la guía oficial en la introducción al POM para revisar cada sección en detalle.

  • Coordenadas del proyecto: groupId, artifactId y version identifican la publicación.
  • Dependencias: la sección <dependencies> declara librerías externas y su alcance (scope).
  • Plugins: <build> agrupa plugins que extienden el ciclo de vida (por ejemplo, compilación o empaquetado).
  • Propiedades: <properties> centraliza versiones y valores reutilizables dentro del archivo.

Gracias a esta declaración estándar, cualquier desarrollador puede clonar el repositorio, ejecutar mvn package y obtener el mismo resultado sin configuraciones adicionales.

2.4 Ciclo de vida de construcción

Maven organiza las tareas en ciclos de vida que definen el orden de ejecución. El ciclo de construcción por defecto avanza por fases encadenadas, lo que significa que invocar una fase ejecuta todas las anteriores.

  • validate: verifica que el proyecto esté correcto y que exista toda la información requerida.
  • compile: compila el código fuente situado en src/main/java.
  • test: ejecuta pruebas unitarias compiladas en src/test/java.
  • package: empaqueta el código compilado en el formato configurado (JAR, WAR, etc.).
  • install: instala el artefacto en el repositorio local para compartirlo entre proyectos del mismo equipo.
  • deploy: publica el artefacto en un repositorio remoto accesible para otros equipos.

Otros ciclos como clean o site cubren la limpieza de artefactos temporales y la generación de documentación. Cada fase puede personalizarse mediante plugins.

2.5 Repositorios: local, central y remotos

Los repositorios almacenan artefactos publicados y sirven como origen para resolver dependencias. Maven gestiona tres tipos principales:

  • Repositorio local: carpeta ubicada en %USERPROFILE%\.m2\repository o ~/.m2/repository, donde se cachean dependencias y artefactos instalados.
  • Repositorio central: Maven descarga dependencias públicas desde Maven Central, el índice más utilizado.
  • Repositorios remotos: servidores corporativos o privados (por ejemplo, Nexus Repository o Artifactory) donde se publican dependencias internas.

La configuración de repositorios adicionales se realiza en el POM o en settings.xml, lo que permite combinar dependencias públicas y privadas de forma segura.

Resumen didáctico

Maven se apoya en proyectos declarativos, una estructura de directorios predecible, el POM como pieza central y ciclos de vida bien definidos. Conocer cómo funcionan los repositorios y dónde se almacenan las dependencias es vital para resolver bibliotecas y publicar artefactos sin sorpresas. Estos conceptos preparan el terreno para crear proyectos reales y personalizar configuraciones en los siguientes temas.