¿Cuáles son los objetivos y fases de Maven y cuál es su diferencia?

Resuelto Tarun Kumar asked hace 11 años • 9 respuestas

¿Cuál es la diferencia/relación entre los objetivos y las fases de Maven? ¿Cómo se relacionan entre sí?

Tarun Kumar avatar Apr 25 '13 10:04 Tarun Kumar
Aceptado

Los objetivos se ejecutan en fases, lo que ayuda a determinar el orden en que se ejecutan. La mejor comprensión de esto es observar los enlaces predeterminados del ciclo de vida de Maven , que muestran qué objetivos se ejecutan en qué fases de forma predeterminada. Los compileobjetivos de fase siempre se ejecutarán antes de los testobjetivos de fase, que siempre se ejecutarán antes de los packageobjetivos de fase y así sucesivamente.

Parte de la confusión se ve exacerbada por el hecho de que cuando ejecutas Maven puedes especificar un objetivo o una fase. Si especifica una fase, Maven ejecutará todas las fases hasta la fase que especificó en orden (por ejemplo, si especifica el paquete, primero se ejecutará a través de la fase de compilación y luego la fase de prueba y finalmente la fase del paquete) y para cada fase ejecutar todos los objetivos adjuntos a esa fase.

Cuando crea una ejecución de complemento en su archivo de compilación de Maven y solo especifica el objetivo, vinculará ese objetivo a una fase predeterminada determinada. Por ejemplo, el jaxb:xjcobjetivo se vincula de forma predeterminada a la generate-resourcesfase. Sin embargo, cuando especifica la ejecución, también puede especificar explícitamente la fase para ese objetivo.

Si especifica un objetivo cuando ejecuta Maven, ejecutará ese objetivo y solo ese objetivo. En otras palabras, si especifica el jar:jarobjetivo, solo ejecutará el jar:jarobjetivo de empaquetar su código en un contenedor. Si no ha ejecutado previamente el objetivo de compilación o no ha preparado su código compilado de alguna otra manera, es muy probable que esto falle.

Pace avatar Apr 25 '2013 03:04 Pace

El ciclo de vida es una secuencia de fases nombradas .
Las fases se ejecutan secuencialmente. Ejecutar una fase significa ejecutar todas las fases anteriores.

El complemento es una colección de objetivos (es decir, tareas) que también se denomina MOJO ( M aven O ld J ava O bject).

Maven se basa en el concepto central de Build Life Cycles . Dentro de cada ciclo de vida de construcción hay fases de construcción , y dentro de cada fase de construcción hay objetivos de construcción .

Podemos ejecutar una fase de construcción o un objetivo de construcción. Al ejecutar una fase de construcción, ejecutamos todos los objetivos de construcción dentro de esa fase de construcción. Los objetivos de construcción se asignan a una o más fases de construcción. También podemos ejecutar un objetivo de construcción directamente.

Hay tres ciclos de vida de construcción integrados principales :

  1. por defecto
  2. limpio
  3. sitio

Cada ciclo de vida de construcción se compone de fases

Por ejemplo, el defaultciclo de vida consta de las siguientes fases de compilación :

◾validate - validate the project is correct and all necessary information is available
◾compile - compile the source code of the project
◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
◾package - take the compiled code and package it in its distributable format, such as a JAR.
◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run
◾verify - run any checks to verify the package is valid and meets quality criteria
◾install - install the package into the local repository, for use as a dependency in other projects locally
◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

Entonces, para pasar por las fases anteriores, solo tenemos que llamar a un comando:

mvn <phase> { Ex: mvn install }

Para el comando anterior, a partir de la primera fase, todas las fases se ejecutan secuencialmente hasta la fase de "instalación". mvnPuede ejecutar un objetivo o una fase (o incluso múltiples objetivos o múltiples fases) de la siguiente manera:

mvn clean install plugin:goal  

Sin embargo, si desea personalizar el prefijo utilizado para hacer referencia a su complemento, puede especificar el prefijo directamente a través de un parámetro de configuración en el POM de maven-plugin-pluginsu complemento.

Una fase de construcción se compone de objetivos de complementos

La mayor parte de la funcionalidad de Maven se encuentra en complementos. Un complemento proporciona un conjunto de objetivos que se pueden ejecutar utilizando la siguiente sintaxis:

 mvn [plugin-name]:[goal-name]

Por ejemplo, un proyecto Java se puede compilar con el objetivo de compilación del complemento del compilador ejecutando mvn compiler:compile.

El ciclo de vida de la compilación es una lista de fases con nombre que se pueden utilizar para ordenar la ejecución del objetivo.

Los objetivos proporcionados por los complementos se pueden asociar con diferentes fases del ciclo de vida. Por ejemplo, de forma predeterminada, el objetivo compiler:compile está asociado a la compile fase , mientras que el objetivo surefire:test está asociado a la test fase . Considere el siguiente comando:

mvn test

Cuando se ejecuta el comando anterior, Maven ejecuta todos los objetivos asociados con cada una de las fases hasta la testfase inclusive. En tal caso, Maven ejecuta el resources:resourcesobjetivo asociado con la process-resourcesfase, luego compiler:compiley así sucesivamente hasta que finalmente ejecuta el surefire:testobjetivo.

Sin embargo, aunque una fase de construcción es responsable de un paso específico en el ciclo de vida de la construcción, la manera en que lleva a cabo esas responsabilidades puede variar. Y esto se hace declarando los objetivos del complemento vinculados a esas fases de compilación.

El objetivo de un complemento representa una tarea específica (más fina que una fase de construcción) que contribuye a la construcción y gestión de un proyecto. Puede estar vinculado a cero o más fases de construcción. Un objetivo que no esté vinculado a ninguna fase de construcción podría ejecutarse fuera del ciclo de vida de la construcción mediante invocación directa. El orden de ejecución depende del orden en que se invocan los objetivos y las fases de construcción. Por ejemplo, considere el siguiente comando. Los argumentos cleany packageson fases de construcción, mientras que dependency:copy-dependencieses un objetivo (de un complemento).

mvn clean dependency:copy-dependencies package

Si esto se ejecutara, la cleanfase se ejecutará primero (lo que significa que ejecutará todas las fases anteriores del ciclo de vida limpio, más la cleanfase misma), y luego el dependency:copy-dependenciesobjetivo, antes de ejecutar finalmente la packagefase (y todas sus fases de compilación anteriores de el ciclo de vida predeterminado).

Además, si un objetivo está vinculado a una o más fases de construcción, ese objetivo se llamará en todas esas fases.

Además, una fase de construcción también puede tener cero o más objetivos vinculados. Si una fase de construcción no tiene objetivos vinculados, esa fase de construcción no se ejecutará. Pero si tiene uno o más objetivos vinculados, ejecutará todos esos objetivos.

Enlaces de ciclo de vida integrados
Algunas fases tienen objetivos vinculados de forma predeterminada. Y para el ciclo de vida predeterminado, estos enlaces dependen del valor del paquete.

Arquitectura Maven:

ingrese la descripción de la imagen aquí

Referencia 1
Referencia 2

Ejemplo de Eclipse para el mapeo del ciclo de vida de Maven

Ejemplo de Eclipse para el mapeo del ciclo de vida de Maven

Premraj avatar Sep 24 '2015 10:09 Premraj

La respuesta elegida es excelente, pero aún así me gustaría agregar algo pequeño al tema. Una ilustración.

Demuestra claramente cómo las diferentes fases se vinculan a los diferentes complementos y los objetivos que exponen esos complementos.

Entonces, examinemos un caso de ejecución de algo como mvn compile:

  • Es una fase que ejecuta el complemento del compilador con el objetivo de compilar.
  • El complemento del compilador tiene diferentes objetivos. Porque mvn compileestá asignado a un objetivo específico, el objetivo de compilación.
  • es lo mismo que corrermvn compiler:compile

Por lo tanto, la fase se compone de objetivos de complementos .

ingrese la descripción de la imagen aquí

Enlace a la referencia

Johnny avatar Aug 24 '2015 13:08 Johnny

Las definiciones se detallan en la página del sitio de Maven Introducción al ciclo de vida de la compilación , pero he intentado resumirlas :

Maven define 4 elementos de un proceso de construcción:

  1. Ciclo vital

    Tres ciclos de vida integrados (también conocidos como ciclos de vida de compilación ): default, clean, site. ( Referencia del ciclo de vida )

  2. Fase

    Cada ciclo de vida se compone de fases , por ejemplo, para el defaultciclo de vida: compile, test, package, install, etc.

  3. Enchufar

    Un artefacto que proporciona uno o más objetivos.

    Según el tipo de paquete ( jar,, waretc.), los objetivos de los complementos están vinculados a fases de forma predeterminada. ( Vínculos de ciclo de vida integrados )

  4. Meta

    La tarea (acción) que se ejecuta. Un complemento puede tener uno o más objetivos.

    Es necesario especificar uno o más objetivos al configurar un complemento en un POM . Además, en caso de que un complemento no tenga definida una fase predeterminada, los objetivos especificados se pueden vincular a una fase.

Maven se puede invocar con:

  1. una fase (por ejemplo clean, , package)
  2. <plugin-prefix>:<goal>(p.ej dependency:copy-dependencies)
  3. <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>(p.ej org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile)

con una o más combinaciones de cualquiera o todos, por ejemplo:

mvn clean dependency:copy-dependencies package
Sandeep Jindal avatar Oct 12 '2014 03:10 Sandeep Jindal