Maven

``

Enlaces y contexto

Qué es Maven

  • Apache Maven es una herramienta de automatización de builds y gestión de proyectos principalmente para el ecosistema java y la JVM
  • Define un modelo de proyecto estandarizado que cubre:
    • compilación
    • gestión de dependencias
    • ejecución de tests
    • empaquetado (JAR, WAR)
    • publicación de artefactos
  • Utiliza convención sobre configuración, reduciendo la necesidad de scripts personalizados

Rol dentro del ecosistema

  • Herramienta clave en:
    • proyectos Java SE, Java EE / Jakarta EE
    • frameworks como Spring
    • entornos corporativos y devops
  • Alternativa/complemento a:
    • Gradle
    • Ant (más antiguo y menos declarativo)
  • Frecuentemente integrada en:
    • pipelines de CICD
    • IDEs como netbeans, IntelliJ IDEA y Eclipse

Arquitectura general

  • Basada en un Project Object Model (POM)
  • Ejecuta fases del ciclo de vida
  • Utiliza plugins para extender funcionalidad
  • Resuelve dependencias desde repositorios locales y remotos

Project Object Model (POM)

  • Archivo principal: pom.xml
  • Escrito en XML
  • Describe el proyecto y cómo debe construirse

Estructura básica del pom.xml

  • Identidad del proyecto
    • groupId
    • artifactId
    • version
  • Tipo de empaquetado
    • jar
    • war
  • Dependencias
  • Plugins
  • Configuración de builds y perfiles

Gestión de dependencias

  • Descarga automática desde repositorios remotos
  • Manejo de dependencias transitivas
  • Versionado centralizado
  • Evita conflictos mediante:
    • scopes
    • exclusions
    • dependency management

Scopes de dependencias

  • compile
  • provided
  • runtime
  • test
  • system
  • Permiten controlar cuándo y dónde se usa una dependencia

Repositorios

  • Repositorio local (~/.m2)
  • Repositorios remotos
    • Maven Central
    • Repositorios privados (Nexus, Artifactory)
  • Posibilidad de repositorios corporativos

Ciclo de vida de Maven

  • Define fases estándar del build
  • Principales ciclos:
    • clean
    • default
    • site

Fases comunes del ciclo default

  • validate
  • compile
  • test
  • package
  • verify
  • install
  • deploy

Plugins

  • Componentes que ejecutan tareas concretas
  • Cada fase ejecuta uno o varios plugins
  • Ejemplos comunes:
    • maven-compiler-plugin
    • maven-surefire-plugin
    • maven-jar-plugin
    • maven-war-plugin

Empaquetado de aplicaciones

  • JAR
    • Librerías o aplicaciones standalone
  • WAR
    • Aplicaciones web para servidores de aplicaciones
  • Controlado desde el POM y los plugins asociados

Maven y la JVM

  • Ejecuta procesos sobre la JVM
  • Compila código Java y otros lenguajes JVM
  • Puede usarse con:
    • Kotlin
    • Scala
    • Groovy

Uso con otros lenguajes

  • Aunque está orientado a Java:
    • puede integrarse en proyectos mixtos
    • puede participar en flujos con PHP u otros lenguajes dentro de pipelines de CICD

Maven Wrapper

  • Script que garantiza una versión concreta de Maven
  • Evita dependencias de instalación global
  • Clave para:
    • equipos grandes
    • entornos CI
    • builds reproducibles

Integración con CI/CD

  • Ejecución directa desde pipelines
  • Builds reproducibles
  • Descarga automática de dependencias
  • Publicación de artefactos
  • Integración con:
    • Jenkins
    • GitLab CI
    • GitHub Actions

Ventajas principales

  • Estandarización del build
  • Curva de aprendizaje moderada
  • Amplio ecosistema de plugins
  • Alta adopción empresarial

Limitaciones

  • XML verboso
  • Menos flexible que Gradle para builds complejos
  • Rendimiento inferior en proyectos muy grandes

Casos de uso habituales

  • Proyectos empresariales Java
  • Librerías compartidas
  • Aplicaciones web tradicionales
  • Automatización de builds en CICD
  • Gestión centralizada de dependencias

Maven – Conceptos avanzados y temas complementarios

Arquitectura interna de Maven

  • Maven funciona como un orquestador de ciclos de vida, no como un compilador en sí.
  • Delegación de responsabilidades:
    • Maven Core coordina fases y resolución
    • Plugins ejecutan la lógica real
  • Arquitectura extensible basada en:
    • plugins
    • extensiones
    • componentes internos (Plexus)

Repositorios Maven

Tipos de repositorios

  • Local:
    • ubicado en ~/.m2/repository
    • cachea dependencias descargadas
  • Remoto:
    • públicos (Maven Central)
    • privados (corporativos, Nexus, Artifactory)
  • Snapshots:
    • versiones en desarrollo
    • pueden actualizarse automáticamente

Políticas de resolución

  • Prioridad:
    • repositorios declarados en el proyecto
    • repositorios definidos en settings.xml
  • Control de actualizaciones:
    • intervalos de snapshot
    • forzado de actualización con flags

settings.xml

  • Archivo de configuración global o de usuario.
  • Permite:
    • definir repositorios corporativos
    • configurar proxies
    • almacenar credenciales de forma segura
    • activar perfiles por entorno
  • Separación clara entre:
    • configuración del proyecto (POM)
    • configuración del entorno (settings)

Perfiles Maven

  • Permiten modificar el comportamiento del build según el contexto.
  • Activación por:
    • sistema operativo
    • variables de entorno
    • propiedades
    • línea de comandos
  • Casos habituales:
    • entornos dev / test / prod
    • builds con o sin tests
    • configuración específica para CICD

Multi-módulo y builds agregados

  • Maven soporta proyectos compuestos por múltiples módulos.
  • Un POM padre:
    • centraliza versiones
    • define plugins comunes
  • Ventajas:
    • coherencia entre módulos
    • builds completos o parciales
    • reutilización estructural
  • Fundamental en arquitecturas grandes y monorepos.

Dependency Management avanzado

  • Uso de BOMs (Bill of Materials):
    • control centralizado de versiones
    • muy común en frameworks modernos
  • Resolución de conflictos:
    • estrategia “nearest-wins”
    • posibilidad de forzar versiones
  • Importante para mantener builds reproducibles a largo plazo.

Propiedades y parametrización

  • Maven permite definir propiedades reutilizables:
    • versiones
    • rutas
    • flags de configuración
  • Fuentes de propiedades:
    • pom.xml
    • settings.xml
    • variables de entorno
    • línea de comandos
  • Clave para automatización y portabilidad.

Testing y calidad

  • Integración nativa con frameworks de testing.
  • Soporte para:
    • tests unitarios
    • tests de integración
  • Integración con herramientas de:
    • cobertura
    • análisis estático
    • calidad de código
  • Fundamental en pipelines de devops.

Documentación y reporting

  • Maven puede generar documentación automática del proyecto.
  • Incluye:
    • informes de dependencias
    • resultados de tests
    • métricas de calidad
  • Útil para auditorías técnicas y proyectos empresariales.

Seguridad y supply chain

  • Verificación de integridad de artefactos.
  • Uso de repositorios internos para:
    • controlar dependencias
    • evitar descargas externas no autorizadas
  • Importante en entornos regulados y corporativos.

Versionado y release management

  • Soporte para procesos de release estructurados.
  • Separación clara entre:
    • versiones snapshot
    • versiones finales
  • Facilita:
    • trazabilidad
    • rollback
    • despliegues controlados

Uso en entornos no Java

  • Aunque está orientado a la JVM, Maven puede:
    • ejecutar scripts
    • coordinar herramientas externas
  • Se utiliza como orquestador de builds incluso en proyectos mixtos.
  • Integrable con otros lenguajes y stacks a nivel de automatización.

Ventajas y limitaciones reales

Ventajas

  • Estándar de facto en el ecosistema Java.
  • Alta previsibilidad y estabilidad.
  • Curva de aprendizaje razonable para equipos grandes.

Limitaciones

  • Configuración XML verbosa.
  • Menor flexibilidad frente a soluciones puramente programáticas.
  • Overhead inicial en proyectos muy pequeños.

Cuándo usar Maven

  • Proyectos JVM medianos o grandes.
  • Equipos que necesitan estandarización.
  • Entornos empresariales con pipelines formales.
  • Sistemas donde la reproducibilidad es crítica.

Recursos y Tools Actualizados para Apache Maven (2025)

Documentación oficial

  • Sitio oficial de plugins y extensiones — lista actualizada de los plugins mantenidos por Apache Maven y otros útiles como OWASP Dependency-Check o CycloneDX SBOM: disponible en la página de plugins de Maven. Maven Plugins
  • Automatizacion y Build / Sistemas – recursos conceptuales base para entender la automatización de builds con Maven.

Cursos y formación

  • **[Curso de Apache Maven OpenWebinars](https://openwebinars.net/cursos/maven/)** – formación completa para aprender Maven desde cero, cubriendo POM, dependencias y ciclos de vida actualizados.
  • **[Curso de Proyectos Java con Apache Maven OpenWebinars](https://openwebinars.net/cursos/proyectos-java-apache-maven/)** – curso complementario centrado en aplicaciones Java con Maven.

IDEs y soporte directo

  • IntelliJ IDEA 2025.1 — la versión más reciente con soporte mejorado para Maven 4 y proyectos con JAR multi-release, facilitando sincronización de POM y depuración. IntelliJ IDEA 2025.1
  • Plugins útiles para IntelliJ (no oficiales pero populares):
    • Maven Project Info — muestra versión del proyecto y rama de Git directamente en el IDE. Maven Project Info

Complementos Maven específicos y ejemplos

  • Complemento de contenido de AEM — ejemplo práctico de un plugin Maven aplicado a proyectos Adobe Experience Manager, útil si trabajas con AEM y workflows complejos. AEM Maven Plugin
  • Azure SDK para Java + Maven — herramientas de compilación para validar uso de BOMs y evitar dependencias obsoletas, integrable en pipelines CI/CD. Azure Maven SDK

Integración con DevOps / CI/CD

  • GitHub Actions (Docs de Microsoft Learn) — integraciones nativas para compilar, testear e implementar proyectos Maven en Azure u otros destinos con automatización fluida. GitHub Actions + Maven
  • Automatización de dependencias con Dependabot en GitHub para mantener actualizadas las librerías Maven y gestionar alertas de seguridad desde PR automáticos. Dependabot

Repositorios y gestión de artefactos

  • Maven Central — repositorio principal para buscar artefactos y versiones actualizadas de dependencias y plugins. Maven Central
  • Herramientas como Artifactory o Nexus (no específicas de Maven, pero compatibles) para gestionar repos privados con control de acceso y caching. Artifactory / Nexus

Herramientas de reporting y calidad

  • OWASP Dependency-Check Plugin — escanea vulnerabilidades conocidas en dependencias Maven como parte del build. Dependency-Check
  • CycloneDX Plugin — genera SBOMs (Bill of Materials) para auditoría de dependencias. CycloneDX Maven Plugin

Seguridad y supply chain

  • Estudios recientes destacan la importancia de reconstruir artefactos con pipelines reproducibles para verificar artefactos descargados desde Maven Central y evitar riesgos en la cadena de suministro de software. Arxiv - Software Supply Chain

Actualizaciones de componentes clave (2025)

  • maven-surefire-plugin 3.5.2, mejoras en JUnit5, paralelismo y reporting. SUSE Update
  • maven-dependency-plugin 3.8.1, añade análisis avanzado y salida JSON del árbol de dependencias. SUSE Update
  • maven-doxia-sitetools 2.0.0 para documentación de proyectos. SUSE Update

Herramientas adicionales y complementarias

  • Gradle — sistema alternativo de automatización que puede consumir repositorios Maven y ofrece builds incrementales y flexibles. Gradle
  • Scripts de automatización personalizados o integraciones con Docker/Kubernetes para entornos de despliegue modernizados. Tutorial Docker + Maven

Repositorios y tutoriales de la comunidad

  • Tutoriales y repositorios como maven-tutorial en GitHub para ejemplos prácticos y casos de estudio concretos. GitHub Maven Tutorial

Resumen de tipos de recursos

  • Formación: cursos online actualizados
  • IDEs y plugins: integración avanzada en 2025
  • CI/CD: automatización con Actions / Azure / pipelines
  • Calidad & Seguridad: plugins para dependencia y SBOM
  • Repos y herramientas: repos central, Artifactory, Nexus