Ciclo de Vida de Maven

Apache Maven es una poderosa herramienta de automatización de compilación que compila código fuente, ejecuta pruebas y produce paquetes ejecutables como archivos JAR o WAR. En el corazón del proceso de construcción de Maven está su concepto de «ciclo de vida». El ciclo de vida de Maven es una colección de fases predefinidas, cada una de las cuales es responsable de una tarea específica en el proceso de construcción, como compilar código, crear archivos JAR o desplegar su aplicación en un servidor.

Entendiendo el ciclo de vida de Maven, puedes aprovechar sus poderosos procesos de compilación, simplificar la configuración de tu proyecto y automatizar tareas de compilación complejas. En este artículo verás una introducción al ciclo de vida de Maven y te mostrará cómo usarlo a tu favor, incluso si eres nuevo en Maven.

Introducción a los ciclos de vida integrados en Maven: Clean, Default y Site

En Maven, un ciclo de vida se compone de fases, que representan etapas en el proceso de construcción de un proyecto. Las fases se ejecutan en un orden específico y cada fase es responsable de una tarea específica o un conjunto de tareas. De forma predeterminada, Maven incluye tres ciclos de vida integrados:

  • Clean: el ciclo de vida de Clean en Maven es responsable de eliminar los archivos generados en el último build realizado. Es particularmente útil para comenzar una compilación nueva y asegurarse de que ningún artefacto de compilaciones anteriores interfiera con la compilación actual. Este ciclo de vida se compone de las fases: ‘pre-clean’, ‘clean’ y ‘post-clean’.
  • Default: el ciclo de vida ‘Default’ en Maven es el núcleo del proceso de build. Contiene una serie de fases que se ejecutan en un orden particular. Estas fases incluyen compilar código, testing, empaquetar e instalar la aplicación. Cada fase es responsable de una parte específica del proceso de build, y a estas fases se pueden vincular plugins para realizar acciones como generar documentación o ejecutar pruebas.
  • Site: el ciclo de vida ‘Site’ en Maven es responsable de generar un informe completo del proyecto. Este informe incluye información sobre la configuración del proyecto, las métricas de calidad del código y los resultados de las pruebas, entre otras cosas. Este ciclo de vida contiene una serie de fases que se ejecutan en un orden particular para generar el informe. El resultado final es un conjunto de páginas HTML que se pueden publicar en un servidor web o ver localmente. Con el ciclo de vida ‘Site’, puedes producir informes de alta calidad que pueden ayudarte a comprender la salud de tu proyecto e identificar áreas donde se pueden realizar mejoras.

Cada ciclo de vida se compone de un conjunto de fases de construcción predefinidas, que se ejecutan en un orden particular. Esto facilita que los desarrolladores comprendan y administren el proceso de build y permite que Maven maneje escenarios de build complejos con facilidad.

Las Fases y su orden de ejecución

Las fases de build de Maven y su orden de ejecución dictan cómo se construye, prueba, empaqueta e implementa un proyecto. En el ciclo de vida ‘Default’, hay fases bien definidas que se ejecutan en un orden específico:

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

La primera fase se llama validate, en la que se comprueba el proyecto para asegurarse de que está correctamente construido y de que se dispone de toda la información necesaria. A continuación, se ejecuta la fase compile para realizar la compilación el código fuente del proyecto.

A esto le sigue la fase test donde se ejecutan las pruebas del proyecto. Si alguna prueba falla durante esta fase, el build falla y la fase de empaquetado no se ejecuta. Una vez que las pruebas tienen éxito, el proyecto está listo para ser empaquetado. La fase package crea un archivo JAR o WAR que se puede usar para la implementación.

Una vez que se empaqueta el proyecto, se ejecuta la fase verify, que verifica si el paquete es válido y cumple con algunos estándares. La fase install instala el paquete en el repositorio local, dejandolo disponible para ser usado en otros proyectos.

Finalmente, la fase deploy copia el paquete en el repositorio remoto, donde otros desarrolladores o máquinas pueden acceder a él.

Es posible invocar a una fase en particular usando el comando mvn. Qué fase ejecutar dependerá de nuestras necesidades. Por ejemplo, si lo que queremos es generar el empaquetado de la aplicación (jar, war, etc) lo haremos llamando a la fase package con el siguiente comando:

mvn package

Este comando hará que se ejecuten las fases previas a package, en el orden establecido en el Ciclo de Vida (en este caso primero la fase compile y luego la fase test), y finalmente se ejecutará la fase package. Por lo tanto, se debe tener en cuenta que al ejecutar una fase, Maven previamente ejecutará las fases precedentes.

Ciclo de Vida de Maven: Goals y plugins

Entonces, las fases son etapas en el proceso de construcción de Maven que están definidas por el ciclo de vida de un proyecto en particular. Cada fase se compone de un conjunto de objetivos (Goals en la terminología de Maven) que se ejecutan en un orden particular, y cada fase debe completarse antes de que comience la siguiente.

Un Objetivo o Goal en Apache Maven es una unidad de actividad, como compilar el código, crear los javadocs o empaquetar la aplicación en un archivo JAR. Los objetivos (Goals) se implementan en un plugin de Maven, que es una colección empaquetada de objetivos (Goals) que se pueden ejecutar como una sola invocación.

Los objetivos (Goals) se pueden vincular a una fase específica del Ciclo de Vida de un proyecto, o se pueden ejecutar directamente desde la línea de comandos especificando el plugin y el nombre del objetivo. Un objetivo puede vincularse a varias fases, lo que permite ejecutarlo en diferentes escenarios.

Por ejemplo, el objetivo compile suele estar vinculado a la fase de compile, mientras que el objetivo test está vinculado a la fase test del ciclo de vida.

Un plugin puede contener uno o más objetivos o goals. Para saber qué Goals tiene un plugin podemos usar el comando mvn. Por ejemplo, para listar los goals del plugin jar ejecutar el siguiente comando:

mvn jar:help

Obtendremos una breve descripción del plugin y de los objetivos o goals que ejecuta:

Ciclo de Vida de Maven: Plugin Goals

En la siguiente tabla se listan las fases del Ciclo de Vida default, con el objetivo o goal que se ejecuta en cada fase y el plugin al que pertenece cada objetivo:

Ciclo de VidaFaseGoalPlugin
defaultcompilecompilecompiler
testtestsurefire
packagejarjar
verify
installinstallinstall
deploydeploydeploy

En resumen, un objetivo (Goal) es una unidad de actividad que puede ejecutar un plugin, mientras que una fase es una etapa en el proceso de construcción que se define por el ciclo de vida de un proyecto y contiene un conjunto de objetivos (Goals) que se ejecutan en un orden particular.

Conclusión

Comprender el ciclo de vida de Maven y sus componentes es fundamental para crear con éxito proyectos Java con Maven. En este artículo hemos visto una descripción general completa del ciclo de vida Default de Maven, sus diferentes fases, plugins y objetivos (Goals). Hemos visto que los objetivos (Goals) están implementados en plugins y que las fases tienen vinculados un conjunto de objetivos (Goals) que se ejecutan en un orden particular. Al comprender estos conceptos, los desarrolladores pueden crear procesos de compilación sólidos y eficientes para sus proyectos con Maven.

Referencias