50% de descuento en todos los planes, por tiempo limitado. Desde $2.48/mo
18 min restantes
Web y aplicaciones de negocio

Domina Maven: comandos, opciones y cheatsheet para un desarrollo más eficiente

Ada Lovegood By Ada Lovegood 18 min de lectura Actualizado el 23 de feb. de 2025
guía de comandos mvn

Las herramientas de automatización y desarrollo son, sin duda, uno de los aspectos más importantes de cualquier proyecto. En este artículo hablamos de Maven: una potente herramienta de automatización para proyectos Java que simplifica el proceso de compilación y establece una estructura uniforme para los proyectos, lo que facilita su gestión y comprensión. Esta guía cubre prácticamente todo lo que necesitas saber sobre Maven: desde comandos y opciones hasta flujos de trabajo de desarrollo más eficientes. Exploraremos áreas como la gestión de servidores y contenedores, la gestión de control de código fuente (SCM) y GPG para firmar artefactos. También veremos comandos especializados para la gestión de plugins, el ensamblado y la distribución, y la generación de sitios e informes de proyecto. Al terminar esta guía, tendrás un conocimiento sólido de los comandos y opciones de Maven.

Introducción a Maven: ciclo de vida del proyecto

En yidis, la palabra Maven significa «acumulador de conocimiento». Este significado explica bastante bien el potencial de Maven como herramienta de automatización para proyectos Java. Maven simplifica enormemente el proceso de compilación y la gestión de proyectos, automatizando tareas y proporcionando un sistema de construcción uniforme.

Para entender bien cómo funciona Maven, analicemos el concepto de Modelo de Objeto de Proyecto (POM). POM es un archivo XML que contiene información sobre el proyecto y sus detalles de configuración. Maven usa el POM como base de su funcionamiento: obtiene las dependencias del proyecto, el directorio de compilación, el directorio de fuentes, el directorio de fuentes de prueba y los objetivos a partir de este archivo.

Una vez definido el proyecto y sus dependencias en el pom.xml, cada vez que ejecutas un comando de Maven, este lee el archivo pom para ejecutar la fase de compilación correspondiente. Existe un ciclo de vida largo desde el momento en que creas el proyecto hasta que lo despliegas. Este ciclo define la secuencia de fases por las que debe pasar tu proyecto. Cada fase representa una etapa del ciclo de vida y ejecuta tareas concretas, como compilar el código fuente, ejecutar pruebas y empaquetar el código en un formato distribuible. Todo esto convierte el ciclo de vida del proyecto en Maven en un concepto fundamental. Veamos más de cerca las fases del ciclo de vida de Maven:

  1. Validar: Esta fase comprueba que el proyecto es correcto y que toda la información necesaria está disponible.
  2. Compilar: En esta fase se compila el código fuente del proyecto.
  3. Prueba: Esta fase prueba el código fuente compilado usando un framework de pruebas unitarias adecuado.
  4. Empaque: Esta fase empaqueta el código compilado en su formato distribuible (p. ej., JAR, WAR).
  5. Instalar: En la fase de instalación, el paquete se instala en el repositorio local y queda disponible para otros proyectos en la misma máquina.
  6. Implementar: Esta fase copia el paquete final en el repositorio remoto para compartirlo con otros desarrolladores y proyectos.

Cada una de estas fases tiene un comando mvn correspondiente que veremos en las siguientes secciones de esta guía de referencia de Maven. Estos serán los comandos más importantes para gestionar el proceso de compilación de tu proyecto.

Gestión de dependencias

Una de las características principales de Maven es la gestión de dependencias. Esta funcionalidad es clave en el rendimiento de Maven, ya que facilita el manejo de las dependencias del proyecto.

Cómo gestiona Maven las dependencias

Maven utiliza un repositorio centralizado conocido como Repositorio Central de Maven, donde se alojan una gran cantidad de librerías y plugins. Cuando un proyecto necesita una dependencia, Maven descarga automáticamente las librerías necesarias del repositorio central y las almacena en el repositorio local. Este repositorio local actúa como caché en tu máquina y reduce los tiempos de descarga en compilaciones futuras.

Las dependencias en Maven se especifican en el archivo pom.xml bajo el elemento <dependencies> sección. Cada dependencia se define mediante un conjunto de coordenadas: groupId, artifactId, y version.

Ámbitos de las dependencias

Al trabajar con Maven, puedes especificar el alcance de las dependencias. Este factor define la visibilidad en el classpath y la fase del ciclo de vida a la que pertenece la dependencia. Así puedes saber qué fase requiere cada dependencia. Los alcances más comunes son:

  • Compilar: Este es el alcance por defecto y se aplica cuando no se especifica ninguno. Las dependencias con este alcance están disponibles en todas las fases de construcción y se incluyen en el paquete final.
  • Proporcionado: Las dependencias con este alcance deben estar disponibles en el entorno de ejecución. Se utilizan durante la compilación, pero no se incluyen en el paquete final.
  • Tiempo de ejecución: Estas dependencias no son necesarias para la compilación, pero sí durante la ejecución. Se incluyen en el classpath de ejecución.
  • Prueba: Estas dependencias solo son necesarias para compilar y ejecutar pruebas. No se incluyen en el classpath de ejecución ni en el paquete final.
  • Sistema: El alcance system es similar al alcance provided, pero debes proporcionar tú mismo el JAR que Maven utilizará. Ese JAR debe estar presente en la ruta del sistema.

Dependencias transitivas

Una de las características más potentes de Maven es su capacidad para gestionar dependencias transitivas. Cuando un proyecto declara una dependencia, Maven incluye automáticamente no solo esa dependencia, sino también las dependencias de esa dependencia, las dependencias de sus dependencias, y así sucesivamente. Esta cadena se conoce como dependencias transitivas. Para entenderlo mejor, imagina que tu proyecto depende de spring-boot-starter-web: Maven incluirá también todas las librerías de las que depende spring-boot-starter-web, como Spring Core, Spring MVC y Jackson.

Ahora que conoces la teoría sobre cómo Maven gestiona las dependencias, veamos cómo trabajar con ello en la práctica:

mvn dependency:resolve

Este comando resuelve y muestra todas las dependencias necesarias para tu proyecto. Úsalo para ver de qué librerías depende tu proyecto y verificar que todo esté en orden.

mvn dependency:tree

Con este comando obtienes una vista en árbol de las dependencias de tu proyecto. Muestra cómo se relaciona cada dependencia y ayuda a identificar posibles conflictos.

mvn dependency:analyze

Este comando analiza las dependencias de tu proyecto para detectar artefactos que no se estén utilizando. Te ayuda a limpiar el proyecto y evitar peso innecesario.

Las funciones de gestión de dependencias de Maven simplifican el proceso de desarrollo, te ayudan a evitar errores comunes y mantienen una estructura de proyecto limpia y ordenada.

Ejecución

La ejecución en Maven consiste en lanzar tareas u objetivos concretos dentro del proyecto. Estas tareas pueden ir desde ejecutar programas Java hasta lanzar scripts o comandos externos. Maven ofrece plugins muy completos para facilitar estas ejecuciones, lo que lo convierte en una herramienta ideal para automatizar distintas partes del flujo de trabajo de tu proyecto. A continuación, repasamos los principales comandos de ejecución de Maven:

mvn exec:java

Este comando se utiliza para ejecutar una clase Java de tu proyecto. Es útil para lanzar clases principales o probar programas Java independientes sin necesidad de empaquetarlos antes.

mvn exec:exec

Este comando te permite ejecutar cualquier programa o script externo desde el entorno de Maven. Puedes usarlo para lanzar scripts de shell, herramientas externas u otros programas que formen parte de tu proceso de construcción.

Los comandos de ejecución de Maven facilitan la automatización de tareas repetitivas y permiten integrar herramientas y scripts externos en el ciclo de vida de construcción. En conjunto, te ayudan a gestionar tus tareas de forma mucho más eficiente.

Gestión de servidores y contenedores

Gestionar servidores y contenedores es una etapa clave en el desarrollo y despliegue de aplicaciones web. Maven simplifica este proceso con plugins que te permiten ejecutar, desplegar y gestionar aplicaciones web en distintos servidores y contenedores directamente desde el proceso de construcción. Aquí tienes algunos comandos esenciales de Maven para gestionar servidores y contenedores:

mvn tomcat7:run

Este comando ejecuta tu aplicación web usando Apache Tomcat. Es útil para el desarrollo y las pruebas en local, y te permite desplegar y probar tu aplicación web rápidamente sin necesidad de configurar un entorno de servidor completo.

mvn jetty:run

Este comando ejecuta tu aplicación web usando un servidor web muy extendido llamado Jetty. Al igual que Tomcat, Jetty es ideal para el desarrollo y las pruebas gracias a su ligereza y a la rapidez con la que despliega aplicaciones.

Cómo funciona la gestión de servidores y contenedores

Maven usa plugins como tomcat7-maven-plugin y jetty-maven-plugin para gestionar las operaciones del servidor. Estos plugins te permiten iniciar, detener y configurar servidores como parte del ciclo de vida de la compilación. Así, desarrollar y probar aplicaciones web en un entorno consistente resulta mucho más sencillo. Usar perfiles de Maven para definir configuraciones de servidor según el entorno te ayuda a gestionar distintos ajustes para desarrollo, pruebas y producción. Esta funcionalidad de Maven también te permite configurar el registro de actividad y la monitorización dentro de los plugins de servidor, de modo que puedes hacer seguimiento de la actividad del servidor y resolver problemas con rapidez.

SCM (gestión de control de código fuente)

Un aspecto fundamental en cualquier proyecto de desarrollo es la Gestión de Control de Código Fuente (SCM). Los equipos de desarrollo necesitan SCM para controlar los cambios en el código fuente a lo largo del tiempo. Maven incluye un conjunto de comandos para interactuar con sistemas SCM como Git, Subversion y otros. Estos comandos pueden automatizar tareas como registrar cambios, obtener el código y actualizar las versiones del proyecto. A continuación se presentan algunos de los comandos SCM de Maven más importantes y sus opciones:

mvn scm:checkin

Puedes usar este comando mvn para registrar los cambios del proyecto en el SCM. Este comando ayuda a automatizar el proceso de confirmar cambios en el repositorio de control de código fuente, de modo que las últimas actualizaciones quedan guardadas y disponibles para el equipo.

mvn scm:checkout

Este comando de Maven se usa para obtener el código del proyecto desde el repositorio SCM. Es útil para conseguir una copia local del proyecto y asegurarte de que siempre trabajas con la versión más reciente del código fuente.

mvn scm:update

Este comando mvn actualiza la copia de trabajo local del proyecto con los últimos cambios del repositorio SCM. Su función es mantener tu código base local sincronizado con el repositorio e incluir cualquier cambio nuevo realizado por otros miembros del equipo.

mvn scm:status

Este comando mvn muestra el estado de la copia de trabajo local en relación con el repositorio SCM. En otras palabras, te indica qué cambios se han realizado en local pero aún no se han confirmado en el repositorio.

mvn scm:tag

Este comando se usa para crear una etiqueta en el repositorio SCM. Las etiquetas marcan puntos concretos en el historial del proyecto, como versiones publicadas o hitos importantes.

Los comandos SCM de Maven pueden simplificar notablemente la gestión del código fuente de tu proyecto. Conocerlos y usarlos bien mejora tu productividad y la colaboración dentro del equipo de desarrollo.

GPG (Protector de Privacidad GNU)

GNU Privacy Guard (GPG) es un software criptográfico que permite cifrar y firmar datos y comunicaciones. En el contexto de Maven, GPG se usa para firmar artefactos y garantizar su autenticidad e integridad. Esto es importante cuando despliegas artefactos en repositorios públicos, ya que permite a los usuarios verificar que no han sido modificados. Maven ofrece varios comandos para trabajar con GPG y facilita el proceso de firma y despliegue de los artefactos de tu proyecto. Veamos algunos ejemplos:

mvn gpg:sign

Puedes usar este comando de Maven para firmar los artefactos del proyecto con GPG. Firmar los artefactos garantiza que otros puedan verificarlos y añade una capa de seguridad y confianza. Este comando se usa habitualmente durante el proceso de compilación para firmar JARs, WARs y otros tipos de artefactos antes del despliegue.

mvn gpg:sign-and-deploy-file

Este comando mvn combina la firma y el despliegue de un archivo en un solo paso. Puedes usarlo cuando quieras firmar un artefacto y desplegarlo en un repositorio de inmediato, simplificando el proceso y asegurando que ambas operaciones se realizan juntas.

Incorporar la firma GPG al proceso de compilación de Maven mejora la seguridad y la fiabilidad de tu software, y facilita que los usuarios confíen en tus artefactos y puedan verificarlos.

Gestión de versiones

La gestión de versiones es un aspecto clave en el desarrollo de software. Una gestión eficaz te permite asegurarte de que las versiones del software se administran, empaquetan y despliegan correctamente. Maven proporciona un conjunto de comandos para automatizar y agilizar el proceso de publicación de versiones. Veamos algunos ejemplos de opciones y comandos de Maven para la gestión de versiones:

mvn release:prepare

Este comando mvn prepara el proyecto para una versión de publicación. Realiza tareas como verificar que no hay cambios sin confirmar, actualizar los números de versión en los archivos pom.xml , etiquetar la versión en el sistema de control de código fuente (SCM) y actualizar los archivos pom.xml a la siguiente versión de desarrollo. Garantiza que el proyecto está en un estado estable y listo para ser publicado.

mvn release:perform

Este comando ejecuta el proceso de publicación. Obtiene el proyecto desde el SCM en la etiqueta creada por el release:prepare el comando construye el proyecto y despliega los artefactos en el repositorio indicado. Este comando garantiza que los artefactos se construyan a partir del estado exacto del código en el momento de preparar la versión.

mvn release:clean

Este comando mvn elimina todos los archivos de copia de seguridad del descriptor de versión que se crean durante el proceso de release:prepare Limpia el entorno y garantiza que no queden archivos residuales de intentos de versión anteriores. Este comando te deja un espacio de trabajo limpio y evita posibles problemas en las próximas versiones.

Usar comandos de gestión de versiones agiliza los procesos de publicación, mejora la calidad del software y garantiza que las versiones se gestionen correctamente.

Arquetipo

Si eres desarrollador y quieres crear estructuras de proyecto basadas en plantillas predefinidas, el plugin Maven Archetype es lo que necesitas. A continuación, repasamos los principales comandos de Maven relacionados con los arquetipos.

mvn archetype:generate

Puedes usar este comando mvn para crear un nuevo proyecto a partir de una plantilla existente, o "arquetipo". El comando guía al usuario en la selección de un arquetipo y la configuración del nuevo proyecto, ayudándote a montar una estructura de proyecto bien organizada.

mvn archetype:catalog

Este comando lista los arquetipos disponibles que se pueden usar para generar nuevos proyectos. Es útil para explorar las distintas plantillas que ofrece la comunidad de Maven y decidir cuál se adapta mejor a las necesidades de tu proyecto.

Con estos dos comandos de Maven puedes arrancar un nuevo proyecto rápidamente. Tanto si estás empezando una aplicación sencilla como un proyecto empresarial complejo, los arquetipos de Maven te dan un punto de partida sólido.

Gestión de plugins

Los plugins de Maven permiten a los desarrolladores ampliar la funcionalidad de Maven y automatizar distintas tareas dentro del ciclo de vida de construcción. Gestionar los plugins correctamente garantiza que tu proyecto sea mantenible y que las construcciones sean reproducibles. En esta sección cubrimos los comandos esenciales para la gestión de plugins de Maven.

mvn plugin:download

Este comando se usa para descargar un plugin de Maven específico desde el repositorio. Puedes usarlo cuando quieras asegurarte de que un plugin concreto está disponible en tu repositorio local antes de ejecutar otros comandos de Maven que dependan de él.

mvn plugin:help

Este comando de Maven muestra información detallada y documentación sobre un plugin de Maven específico. Úsalo cuando necesites entender los distintos goals, parámetros y configuraciones disponibles para un plugin.

Estos comandos de gestión de plugins de Maven mejoran el proceso de construcción, automatizan los flujos de trabajo y mantienen altos estándares de calidad y consistencia en el proyecto.

Ensamblado y distribución

La funcionalidad de ensamblado y distribución de Maven permite a los desarrolladores empaquetar sus proyectos en distintos formatos para su distribución. Puedes usarla para crear JARs ejecutables, aplicaciones empaquetadas o distribuciones personalizadas que incluyan dependencias y otros recursos. A continuación, cubrimos los comandos clave de Maven para ensamblado y distribución.

mvn assembly:assembly

Este comando crea un ensamblado para el proyecto. Un ensamblado es un paquete distribuible que puede incluir binarios, código fuente, dependencias y otros recursos. Este comando usa el Assembly Plugin para generar estos paquetes a partir del descriptor de ensamblado proporcionado.

mvn assembly:directory

Este comando mvn crea la estructura de directorios del ensamblado sin generar el archivo comprimido final. Es útil para probar y verificar el contenido y la estructura del ensamblado antes de empaquetarlo.

Aprender a usar los comandos de ensamblado y distribución de Maven puede ayudarte mucho a la hora de empaquetar y distribuir tus aplicaciones.

Comandos de generación de sitios

Los comandos de sitio de Maven son una excelente forma de documentar proyectos. Estos comandos generan sitios web de documentación completos para tus proyectos. A continuación, cubrimos los comandos de sitio esenciales y sus funciones:

mvn site

El comando mvn site genera la documentación del sitio del proyecto e incluye información sobre él, como el resumen del proyecto, informes de dependencias, uso de plugins y más.

mvn site:deploy

Puedes usar este comando para desplegar el sitio generado en un servidor remoto. Es útil para poner la documentación a disposición de una audiencia más amplia, como los miembros del equipo o el público en general.

mvn site:stage

Este comando prepara el sitio en un directorio local. Úsalo para previsualizar el sitio en local antes de desplegarlo en el servidor remoto.

Una documentación clara y bien organizada es fundamental en el desarrollo de un proyecto. El comando mvn site te permite tenerlo todo en orden y facilita la comunicación dentro de los equipos de desarrollo.

Comandos WAR y JAR

Como desarrollador, sabes perfectamente que poder empaquetar tus aplicaciones en distintos formatos es fundamental en el proceso de desarrollo. Maven te permite empaquetar aplicaciones en varios formatos, incluidos WAR (Web Application Archive) y JAR (archivo de aplicación). La importancia de estos formatos de empaquetado queda clara cuando necesitas desplegar aplicaciones en servidores o distribuir bibliotecas. A continuación, cubrimos los comandos mvn clave para generar archivos WAR y JAR:

mvn war:war

Este comando compila tu proyecto y lo empaqueta en un archivo WAR. Al ejecutarlo, Maven generará el archivo WAR en el directorio target de tu proyecto.

mvn jar:jar

Este comando compila tu proyecto y lo empaqueta en un archivo JAR en el directorio target de tu proyecto.

Estos dos comandos te ayudan en el despliegue y la distribución, por lo que puedes usarlos para gestionar y distribuir tus aplicaciones Java de forma eficiente.

Informes

Todo proyecto de software necesita informes detallados para hacer seguimiento del progreso. Maven ofrece plugins potentes y comandos mvn para generar distintos tipos de informes. Esta sección cubre dos plugins de Maven que puedes usar para los informes: Surefire y JaCoCo.

Plugin Surefire

Puedes usar este plugin para ejecutar pruebas unitarias en un proyecto Maven. Genera informes detallados sobre las pruebas ejecutadas, para que puedas verificar que el código se comporta como esperas.

mvn surefire-report:report

Este comando genera un informe de pruebas unitarias en un formato fácil de leer y analizar. Con este comando, Maven crea un informe HTML en el directorio target/site de tu proyecto. El informe incluye información sobre el número de pruebas ejecutadas, las que pasaron y las que fallaron, junto con trazas de pila detalladas para cada fallo.

Plugin JaCoCo

Puedes usar este plugin para medir e informar la cobertura de código mediante pruebas unitarias, lo que te permite verificar que tus pruebas cubren la base de código.

mvn jacoco:report

Si quieres ver qué partes del código se han probado y cuáles no, este comando genera un informe de cobertura de código. El informe que crea es un informe HTML en el directorio target/site/jacoco que muestra métricas de cobertura detalladas para clases, métodos y líneas de código.

Estos dos plugins te ayudan a hacer seguimiento de los resultados de las pruebas y la cobertura de código, y te ofrecen información útil sobre el estado y la calidad de tu base de código.

Personalización de la compilación

Maven te permite adaptar el proceso de construcción a los requisitos específicos de tu proyecto. En esta sección veremos cómo usar perfiles de Maven y definiciones de propiedades para personalizar la construcción.

Perfiles de Maven

Con los perfiles de Maven puedes definir distintas configuraciones para tu proyecto, que se pueden activar en función de factores como propiedades del sistema, variables de entorno o condiciones personalizadas. Esto significa que puedes personalizar el proceso de construcción para distintos entornos, como desarrollo, pruebas y producción. Puedes definir perfiles en la sección pom.xml bajo el elemento <profiles> Y la opción -p seguida del ID del perfil lo activará.

Definición de propiedades

Las propiedades de Maven te permiten definir valores que se pueden reutilizar en todo tu archivo pom.xml . Estas propiedades se pueden especificar en la sección pom.xml, desde la línea de comandos o en archivos de propiedades externos. Puedes definir propiedades en la sección <properties> de tu pom.xml. Una vez definidas, puedes usar estas propiedades en cualquier parte del archivo pom.xml .

Personalizar el proceso de construcción en Maven te ayuda a adaptar tu proyecto a distintos entornos y requisitos. Usando perfiles puedes cambiar entre diferentes configuraciones de construcción, y usando propiedades puedes reutilizar y gestionar valores de forma eficiente.

Conclusión

Este artículo ofrece una introducción completa a Maven y te guía paso a paso por el proceso de desarrollo de una aplicación Java. Como herramienta de automatización para proyectos Java, Maven cuenta con distintos comandos y capacidades para cada fase del desarrollo, y dominarlos mejora considerablemente la calidad de tu proceso de desarrollo.

Preguntas frecuentes

¿Para qué se usa Maven?

Maven es una herramienta de automatización de construcción y gestión de proyectos para proyectos Java. Simplifica el proceso de construcción, gestiona las dependencias del proyecto y proporciona una estructura de proyecto estandarizada. Maven también permite documentar, informar y distribuir proyectos.

¿Qué es el POM en Maven?

Maven es una herramienta que automatiza el proceso de compilación y la gestión de dependencias en proyectos Java. El POM (Project Object Model) es un archivo XML de Maven que contiene información sobre el proyecto y los detalles de configuración que Maven utiliza para compilarlo. El archivo POM define las dependencias, los plugins, los objetivos y otras configuraciones de compilación del proyecto.

Compartir

Más del blog

Sigue leyendo.

Imagen destacada de la reseña de Odoo con un titular grande a la izquierda y el logotipo de Odoo a la derecha, rodeada de paneles de interfaz flotantes sobre un fondo de nubes en tonos violeta suave.
Web y aplicaciones de negocio

Una reseña completa de Odoo: ¿Es Odoo el ERP adecuado para tu empresa?

Odoo es una de las plataformas ERP más consideradas por empresas en crecimiento, y la razón es sencilla: promete cubrir muchas necesidades en un solo lugar. Ventas, contabilidad, inventario

Jim SchwarzJim Schwarz 11 min de lectura
Imagen destacada de alternativas de código abierto a WordPress con fondo de degradado de colores, monitor de escritorio, editor de código, vista previa de panel difuminada y un titular grande a la izquierda.
Web y aplicaciones de negocio

Las mejores alternativas de código abierto a WordPress para desarrolladores

WordPress sigue siendo relevante y funciona bien para una gran variedad de sitios. Su directorio de plugins alberga más de 62.000 y su directorio de temas ofrece más de 14.000 temas gratuitos. Eso

Jim SchwarzJim Schwarz 14 min de lectura
Imagen destacada de Automad vs. WordPress con los logotipos de ambas plataformas y un titular que pregunta qué CMS deben elegir los desarrolladores.
Web y aplicaciones de negocio

Automad vs. WordPress: una comparativa detallada entre dos de las mejores plataformas CMS

Automad y WordPress resuelven el mismo problema de formas muy distintas. Automad es un CMS de archivos planos y motor de plantillas, por lo que el contenido vive en archivos en lugar de en una base de datos; WordPress,

Jim SchwarzJim Schwarz 9 min de lectura

¿Listo para desplegar? Desde 2,48 $/mes.

Cloud independiente, desde 2008. AMD EPYC, NVMe, 40 Gbps. 14 días de garantía de devolución.