Saltar al contenido

Maven: ciclo de vida frente a fase frente a complemento frente a objetivo

Solución:

A Ciclo de vida de Maven es un concepto (abstracto) que cubre todos pasos (o mejor: todos los pasos que los diseñadores de Maven decidieron apoyar) que se espera que ocurran durante la vida de desarrollo de un proyecto. Estos pasos (o etapas) son llamado etapas en terminología de Maven.

A Complemento de Maven es un contenedor para / proveedor de metas. El código implementado en los objetivos es el verdadero caballo de batalla. (Maven en sí mismo es solo administrar complementos y ejecutar objetivos). Cada uno de los objetivos de un complemento se puede asignar / vincular a cualquiera de las fases del ciclo de vida.

Al invocar mvn <phase> Maven pasa todas las fases (cada vez) y ejecuta todos los objetivos (suministrado por complementos) que se han vinculado a alguna de las fases antes y hasta (e incluyendo) la fase dada. Si hay una fase sin ningún objetivo, no se hace nada. Pero la fase ha pasado de todos modos.

Es decir, no puedes “‘insertar’ fases adicionales” en uno de los ciclos de vida integrados de Maven. ¡Ya están ahí, siempre! Podría desarrollar su propio ciclo de vida con sus propias fases, pero eso es mucho más que simplemente usar Maven tal como está.

Los objetivos también se pueden ejecutar directamente, lo que se le indica cuando se ejecuta mvn sin ninguna fase o (complemento:) objetivo [with line breaks and shortened for readability here]:

You must specify a valid lifecycle phase or a goal in the format

<plugin-prefix>:<goal> or

<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>.

Available lifecycle phases are:

...

… ver salida real o Maven, Introducción al ciclo de vida de la construcción a Referencias debajo.

Referencias

  • Maven / Introducción al ciclo de vida de la compilación

Si alguna vez se preguntó cómo sabe Maven qué hacer sin ningún objetivo vinculante en el POM, hay un enlace a default-bindings.xml en la parte inferior de esa página que se encuentra en <Your Maven installation>/lib/maven-core-x.y.z.jar/META-INF/plexus/default-bindings.xml.

Las fases de los ciclos de vida integrados (limpio, defecto, sitio) se declaran en <Your Maven installation>/lib/maven-core-x.y.z.jar/META-INF/plexus/components.xml debajo .../<component>/<role>org.apache.maven.lifecycle.Lifecycle.

  • Maven: La referencia completa, Capítulo 4. El ciclo de vida de la compilación
  • Maven con el ejemplo, 3.5. Conceptos básicos

Maven: ciclo de vida frente a fase frente a complemento frente a objetivo

Respondiendo tarde solo para aclarar otro nivel de granularidad que falta en este hilo: ejecuciones (de un objetivo), que son las unidades más pequeñas de una construcción de Maven.

Por lo tanto, tenemos ciclos de construcción (básicamente, conjunto de acciones para un objetivo general específico), que consisten en etapas (menor granularidad, un paso de ciclo), que puede invocar un conjunto de configuraciones metas proporcionado por ciertos complementos. Es decir, Maven es (también) un ejecutor de complementos, cada complemento puede ofrecer uno o más objetivos. Luego (también) decide qué objetivo se adjunta a qué fase, la mayoría de las veces en el ciclo de vida predeterminado (sin ninguno, es decir, el predeterminado). Pero en realidad puede tener otro nivel: ejecuciones (del mismo objetivo, del mismo complemento o de diferentes objetivos de diferentes complementos)

Una imagen que preparé para resumir todo
ingrese la descripción de la imagen aquí

Y, de hecho, así es como Maven lo muestra (su unidad de trabajo más pequeña) a través de la cadena única en su registro de compilación:

plugin-artifactId:plugin-version:plugin-goal (goal-execution-id) @ project-name

Por ejemplo, tendríamos:

[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ sample-project ---

Lo que de hecho significa (a través de diferentes niveles de granularidad):

  • Durante el compile fase (desafortunadamente solo se menciona con mvn -X ... para depurar, bajo REACTOR BUILD PLAN – Tasks: [...]) →
  • Estoy invocando el complemento del compilador Maven (especificado por artifactId y version) con su compile meta →
  • como lo define el execution con el id default-compile.

Es único porque, de hecho, podría tener el mismo objetivo (del mismo complemento) vinculado a diferentes fases o a la misma fase pero en diferentes ejecuciones (es decir, con diferentes configuraciones). los maven-compiler-plugin, por ejemplo, también se utiliza durante la test-compile fase (una fase diferente) para compilar el código de prueba (a través de su testCompile gol) en una ejecución diferente (default-testCompile). También puede compilar (usando el mismo complemento y objetivo) algún código generado automáticamente durante una fase diferente según lo definido por una ejecución que especificó en el POM (y potencialmente una configuración diferente).

Las ejecuciones predeterminadas se proporcionan listas para usar a través de los enlaces de empaque de Maven, es decir, de forma predeterminada (y aplicando la convención sobre la configuración), Maven ya invoca ciertos objetivos (de los complementos estándar) durante ciertas fases. Los identificadores de ejecución de estas invocaciones predeterminadas se definen de acuerdo con ciertas convenciones.

Esto también explica por qué si realmente desea anular un comportamiento predeterminado (enlace) de una compilación de Maven, debe especificar (anular) exactamente la misma identificación de ejecución en su POM para el mismo complemento. Por ejemplo, podría omitir la compilación simplemente definiendo una ejecución del maven-compiler-plugin con el mismo default-compile id pero vinculado a una fase no existente (o vacía).

Para hacerlo corto: una ejecución le dice a Maven qué objetivo (s) ejecutar con qué configuración dentro de qué fase.

Algunas ejecuciones se proporcionan de forma predeterminada (enlaces predeterminados), lo que explica por qué el pom mínimo maven de solo 6 Las líneas ya pueden hacer mucho (compilar, probar, empaquetar, etc.): ejecutar objetivos de complementos estándar en ciertas fases: es una convención sobre la configuración. Luego, a través del pom.xml configuración que puede agregar cosas (ejecuciones) para construir o influir en el comportamiento de complementos ya configurados (en este caso no executions sección, pero solo configuration seria suficiente).

Sí, puede omitir los ciclos de compilación (y sus fases) e invocar directamente los objetivos (de los complementos). Imagina lo siguiente:

mvn compiler:compile
mvn compiler:testCompile
mvn surefire:test
mvn jar:jar

(NOTA: también puede invocar en línea en una sola llamada)

Aquí estamos compilando código de aplicación, código de prueba, ejecución de pruebas y paquete: imagina lo manual, propenso a errores, repetitivo y lento que sería esto. La convención sobre la configuración nos ayuda: Maven presenta ciclos de vida de compilación y etapas. El ciclo de vida predeterminado (sin nombre, es decir, el predeterminado), proporciona un rango de fases basadas en las mejores prácticas y convenciones (el mantra de Maven).
Si desea lograr lo mismo que el anterior, simplemente ejecute: mvn package y compilará, probará y empaquetará automáticamente su proyecto. ¿Cómo? invocando complementos. Es decir, las fases son un conjunto significativo y configurable de ejecuciones de complementos (objetivos). Para hacerlo aún más estándar, para cada fase, Maven invocará en primer lugar cualquier fase anterior, de modo que, por ejemplo, si desea probar, se asegurará de compilar en primer lugar.

ps tenga en cuenta que al especificar varios objetivos para el mismo execution, todavía verá claramente en el registro de compilación dos ejecuciones diferentes (con la misma identificación) para los dos objetivos diferentes (por lo tanto, sigue siendo una tupla única).

Crédito a Sandeep Jindal y Premraj (desde aquí, ¿Cuáles son los objetivos y fases de Maven y cuál es su diferencia?). Su explicación me ayuda a comprender.

Creé algunos ejemplos de código completos y algunas explicaciones simples aquí https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/. Creo que puede ayudar a otros a comprender y a intentar algo directamente.

En resumen, desde el enlace, no debe intentar comprender los tres a la vez, primero debe comprender la relación en estos grupos:

  • Ciclo de vida vs fase
  • Complemento vs objetivo

1. Ciclo de vida frente a fase

Ciclo vital es una colección de fase en secuencia, consulte aquí Referencias de ciclo de vida. Cuando llamas a un fase, también llamará a todos etapas antes de eso.

Por ejemplo, el ciclo de vida limpio tiene 3 faseslimpieza previa, limpieza, limpieza posterior).

mvn clean

Llamará limpieza previa y limpio.

2. Complemento frente a objetivo

Objetivo es como una acción en Enchufar. Entonces, si el complemento es una clase, el objetivo es un método.

puedes llamar a un objetivo como este:

mvn clean:clean

Esto significa “llamar al objetivo limpio, en el complemento limpio” (Nada se relaciona con la fase limpia aquí. No dejes que la palabra “limpio” te confunda, ¡no son lo mismo! Mira la explicación completa en mi enlace arriba)

3. Ahora la relación entre Fase y Meta:

Fase Can (pre) enlaces a Objetivo(s) Por ejemplo, normalmente, la fase limpia se vincula con la meta limpia. Entonces, cuando llamas a este comando:

mvn clean

Llamará a la fase de limpieza previa y a la fase de limpieza que se vincula con la meta de limpieza: limpieza.

Es casi lo mismo que:

mvn pre-clean clean:clean
¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *