¿Que es un Maven Goal? . Esta es una de las preguntas más típicas cuando uno trabaja con Maven y muchas veces cuesta entender a detalle para qué sirve un Goal. Vamos a explicarlo paso a paso . Para ello lo primero que tenemos que entender es que Maven es una herramienta que facilita la construcción de nuestro software. Para ello aporta una serie de carpetas por defecto así como un ciclo de vida de la construcción de nuestro código. En este ciclo de vida Maven define unos pasos muy concretos entre los cuales destacan :
- Validate :Valida el proyecto y revisa que toda la información para construir el software este disponible.
- Compile: Compila el código fuente para generar los binarios correspondientes que se ejecutarán.
- Test :Ejecuta las pruebas unitarias que validan el código previamente construido.
- Package : Empaqueta la aplicación en un formato distribuible tipo JAR ,WAR .EAR etc
- Install: Despliega el Package en el repositorio local de nuestro equipo.
Maven Plugins
¿Como se encarga Maven de ejecutar todas estas fases de la construcción del software? . La realidad es que el no lo puede hacer solo . Sino que necesita de un grupo de Plugins. Cada uno de los Plugins se encarga de una tarea concreta.
Por ejemplo el Plugin de Compiler se encarga de compilar el código , mientras que el plugin de Install se encarga de desplegar el package en nuestro repositorio. Visto así parece que cada ciclo de vida de Maven esta ligado a un plugin . Podríamos por ejemplo mostrar la siguiente imagen:
Lamentablemente esta imagen no es del todo correcta y hace flaco favor a la hora de entender las relaciones entre Maven LifeCycle , Maven Plugins y Maven Goals. Pero los nombres son tan similares que parece que un Maven Plugin y un Maven LifeCycle es lo mismo . Lamentablemente no lo son.
¿Que es un Maven Goal?
La realidad es algo diferente . Un Maven plugin se encarga de centralizar una serie de tareas que son comunes a la construcción del software y están fuertemente relacionadas . Así pues cada plugin dispone de varias tareas a ejecutar. Por ejemplo el plugin de Compile dispone de dos tareas a cada tarea se la denomina Maven Goal. En este caso la tarea de Compile que compila el código y la tarea o goal de TestCompile que compila la parte de Testting.
Es aquí donde podemos darnos cuenta de que un Maven Plugin no esta directamente relacionado con un Maven LifeCycle ya que por ejemplo el Plugin de Compile tiene dos Goals y cada uno de esos Goals esta relacionado con un LifeCycle Diferente:
Aquí hemos usado el LifeCycle de Compile y el LifeCycle de Test para ligar dos Goals diferentes de un mismo Plugin . Este es el concepto de Goal un Maven Goal es una tarea que pertenece a un Plugin concreto y se puede usar en una fase del LifeCycle (Ciclo de Vida) de Maven.
Súper claro, otra súper píldora.
gracias 🙂