Apache Maven es una herramienta de gestión de proyectos que automatiza la construcción, informe y documentación de software. Usa un archivo POM (Project Object Model) basado en XML para definir cómo se construye un proyecto, sus dependencias y cómo se empaqueta. Esto estandariza el proceso, permitiendo que cualquier desarrollador compile, pruebe y empaquete un proyecto de forma consistente.

Conocer los comandos de Maven es clave porque te da control total sobre el ciclo de vida de tu proyecto. Te permite automatizar tareas, gestionar dependencias, depurar problemas de construcción y personalizar el proceso. Dominar estos comandos te hará más productivo y autónomo al manejar proyectos de software.
Comandos básicos y del ciclo de vida
El ciclo de vida de Maven es un concepto fundamental que define una secuencia estandarizada de etapas, o “fases”, por las que pasa un proyecto durante su construcción y gestión. En lugar de ejecutar tareas individuales de forma desordenada, Maven agrupa las operaciones comunes (como compilar, probar, empaquetar e instalar) en estas fases predefinidas. Existen tres ciclos de vida principales: clean (para limpiar el proyecto), default o build (el principal, que gestiona la construcción y despliegue), y site (para generar la documentación del proyecto). Cuando ejecutas un comando de Maven especificando una fase (por ejemplo, mvn package), Maven automáticamente ejecuta todas las fases anteriores en ese ciclo de vida en el orden correcto, asegurando una construcción consistente y repetible. Cada fase, a su vez, está compuesta por “goals” (objetivos) que son acciones concretas realizadas por plugins de Maven.
La siguiente imagern representa este ciclo de vida:

Es posible ejecutar las diferentes fases con los comandos:
mvn clean: Limpia el directorio del proyecto, eliminando los archivos generados por compilaciones anteriores (como el directoriotarget/).mvn validate: Valida que el proyecto sea correcto y que toda la información necesaria esté disponible.mvn compile: Compila el código fuente del proyecto.mvn test: Ejecuta las pruebas unitarias del proyecto.mvn package: Compila el código, ejecuta las pruebas y empaqueta el código compilado en un formato distribuible (por ejemplo, un JAR o WAR).mvn verify: Ejecuta las verificaciones sobre el paquete resultante para asegurar la calidad. Esto suele incluir la ejecución de pruebas de integración.mvn install: Instala el paquete en el repositorio local de Maven, haciéndolo disponible para otros proyectos locales.mvn deploy: Copia el paquete final al repositorio remoto para compartirlo con otros desarrolladores y proyectos.
Comandos útiles para el desarrollo y la depuración
mvn clean install: Una combinación muy común que limpia y luego instala el proyecto en el repositorio local.mvn clean package -DskipTests: Limpia y empaqueta el proyecto, pero omite la ejecución de las pruebas. Útil cuando solo quieres construir rápidamente y sabes que las pruebas ya pasan o no son relevantes en ese momento.mvn test -Dtest=NombreDeTuClaseDeTest: Ejecuta solo una clase de prueba específica.mvn jetty:run(otomcat7:run,spring-boot:rundependiendo del plugin): Inicia un servidor web embebido para ejecutar tu aplicación (común en proyectos web).mvn dependency:tree: Muestra el árbol de dependencias del proyecto, lo que es muy útil para depurar conflictos de dependencias.mvn help:effective-pom: Muestra el POM efectivo del proyecto, incluyendo las configuraciones heredadas de los POMs parentales y de los perfiles. Esto es invaluable para entender cómo Maven está resolviendo la configuración de tu proyecto.mvn help:active-profiles: Lista los perfiles de Maven que están activos para la construcción actual.mvn help:describe -Dplugin=compiler: Muestra información sobre un plugin específico de Maven (en este caso, el plugin de compilación).mvn -Xomvn --debug: Ejecuta Maven en modo depuración, mostrando información mucho más detallada sobre lo que está haciendo. Útil para diagnosticar problemas complejos.mvn -Bomvn --batch-mode: Ejecuta Maven en modo “batch”, lo que suprime las interacciones de usuario y reduce la verbosidad de la salida. Ideal para scripts de CI/CD.
Comandos para la gestión de dependencias
mvn dependency:analyze: Analiza las dependencias del proyecto para encontrar dependencias no utilizadas o declaradas pero no usadas.mvn dependency:resolve: Resuelve y muestra todas las dependencias del proyecto.mvn dependency:get: Descarga una dependencia de un proyecto desde el repositorio.
Comandos para generar proyectos
mvn archetype:generate: Genera un nuevo proyecto Maven basado en un arquetipo. Es la forma más común de iniciar un nuevo proyecto. Por ejemplo ( para generar un proyecto rápido):
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart
Comandos de gestión de versiones
mvn versions:display-dependency-updates: Muestra las actualizaciones disponibles para las dependencias de tu proyecto.mvn versions:display-plugin-updates: Muestra las actualizaciones disponibles para los plugins de tu proyecto.mvn versions:set -DnewVersion=1.0.1-SNAPSHOT: Cambia la versión del proyecto (útil en flujos de trabajo de lanzamiento).
Consideraciones adicionales
- Perfiles de Maven: Puedes activar perfiles específicos usando
-Pnombre-del-perfil. Por ejemplo:mvn clean install -Pproduccion. - Propiedades del sistema: Puedes pasar propiedades del sistema a Maven usando
-Dnombre=valor. Esto es muy común para configurar cosas como la omisión de pruebas (-DskipTests) o la configuración del entorno. - pom.xml: La configuración de todos estos comandos y del proyecto en sí se encuentra en el archivo
pom.xml.