tutorial proyecto homepage goals español desde crear consola comandos maven

proyecto - maven tutorial eclipse



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

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 también llamados MOJO ( M aven O ld J ava O bject).
Analogía: el complemento es una clase y los objetivos son métodos dentro de la clase.

Maven se basa en el concepto central de un ciclo de vida de construcción.
Hay tres ciclos de vida de construcción incorporados:

  1. defecto
  2. limpiar
  3. sitio

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

Por ejemplo, el ciclo de vida default compone 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.

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 de forma secuencial hasta la fase de "instalación". mvn puede ejecutar un objetivo o una fase (o incluso varios objetivos o varias 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 maven-plugin-plugin en el POM de su complemento.

Una fase de construcción se Plugin objetivos de Plugin

La mayor parte de la funcionalidad de Maven está 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 puede compilarse con el objetivo de compilación del mvn compiler:compile ejecutando mvn compiler:compile .

El ciclo de vida de compilación es una lista de fases nombradas que se pueden usar para dar orden a la ejecución del objetivo.

Los objetivos proporcionados por los complementos pueden asociarse con diferentes fases del ciclo de vida. Por ejemplo, de forma predeterminada, el objetivo compiler:compile está asociado con la fase de compile , mientras que el objetivo surefire:test está asociado con la fase de test . 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 e incluyendo la fase de test . En tal caso, Maven ejecuta el objetivo resources:resources asociado con la fase de process-resources , luego el compiler:compile , y así sucesivamente hasta que finalmente ejecuta el objetivo de surefire:test .

Sin embargo, aunque una fase de compilación es responsable de un paso específico en el ciclo de vida de la compilació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 construcción.

Un objetivo de 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 no vinculado a ninguna fase de compilación podría ejecutarse fuera del ciclo de vida de la compilación por invocación directa. El orden de ejecución depende del orden en que se invocan los objetivos y las fases de creación. Por ejemplo, considere el siguiente comando. Los argumentos de clean y package son fases de compilación, mientras que la dependency:copy-dependencies es un objetivo (de un complemento).

mvn clean dependency:copy-dependencies package

Si se ejecutara esto, la fase de clean se ejecutará primero (lo que significa que ejecutará todas las fases anteriores del ciclo de vida de limpieza, más la fase de clean sí), y luego el objetivo de dependency:copy-dependencies , antes de finalmente ejecutar la fase de package (y todas sus fases de compilación anteriores del 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 a ella. Si una fase de compilación no tiene objetivos vinculados a ella, esa fase de compilación no se ejecutará. Pero si tiene uno o más objetivos vinculados a él, ejecutará todos esos objetivos.

Encuadernaciones de ciclo de vida incorporadas
Algunas fases tienen objetivos vinculados a ellos por defecto. Y para el ciclo de vida predeterminado, estos enlaces dependen del valor de empaquetado.

Arquitectura de Maven:

Referencia 1
Referencia 2

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


Crédito a Sandeep Jindal y Premraj. Su explicación me ayuda a entender después de confundido acerca de esto por un tiempo.

He creado algunos ejemplos de código completo y algunas explicaciones simples aquí https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ . Creo que puede ayudar a otros a entender.

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

  • Ciclo de vida vs fase
  • Plugin vs Goal

1. Ciclo de vida vs fase

Ciclo de vida es una colección de fases en secuencia, consulte aquí Referencias del ciclo de vida . Cuando llamas a una fase , también llamará a todas las fases anteriores.

Por ejemplo, el ciclo de vida de limpieza tiene 3 fases ( limpieza previa, limpieza, limpieza posterior ).

mvn clean

Llamará pre-limpieza y limpieza .

2. Plugin vs Goal

El objetivo es como una acción en el plugin . Así que si el complemento es una clase, el objetivo es un método.

Puedes llamar a una meta como esta:

mvn clean:clean

Esto significa "llama al objetivo limpio, en el complemento limpio" (nada se relaciona con la fase de limpieza aquí. No dejes que la palabra "limpio" te confunda, ¡no son lo mismo!)

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

La fase puede (pre) vincularse con el objetivo (s). Por ejemplo, normalmente, la fase limpia se vincula con el objetivo limpio. Entonces, cuando llamas a este comando:

mvn clean

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

Es casi lo mismo que:

mvn pre-clean clean:clean

Más detalles y ejemplos completos en https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/


Creo que ya se ha proporcionado una buena respuesta, pero me gustaría agregar un diagrama fácil de seguir de los diferentes 3 ciclos de vida ( build , clean y site ) y las fases en cada uno.

Las fases en negrita - son las fases principales comúnmente utilizadas.


Hay tres ciclos de vida de compilación incorporados:

  • defecto
  • limpiar
  • sitio

Valor predeterminado del ciclo de vida -> [validar, inicializar, generar fuentes, procesar fuentes, generar recursos, procesar recursos, compilar, clases de proceso, generar fuentes de prueba, procesar fuentes de prueba, generar recursos de prueba, procesar -test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verifica, instala, implementa]

Ciclo de vida limpio -> [limpieza previa, limpieza, limpieza posterior]

Sitio del ciclo de vida -> [sitio previo, sitio, sitio posterior, despliegue del sitio]

El flujo es secuencial, por ejemplo, para el ciclo de vida predeterminado , comienza con validar , luego inicializar y así sucesivamente ...

Puede verificar el ciclo de vida habilitando el modo de depuración de mvn , es decir, mvn -X <your_goal>


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 unieron a los diferentes complementos y los objetivos que esos complementos exponen.

Entonces, examinemos un caso de ejecutar algo como mvn compile :

  • Es una fase que ejecuta el plugin del compilador con el objetivo de compilación.
  • El plugin del compilador tiene diferentes objetivos. Para mvn compile se asigna a un objetivo específico, el objetivo de compilación.
  • Es lo mismo que ejecutar mvn compiler:compile

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

Enlace a la reference


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 summarize :

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

  1. Ciclo vital

    Tres ciclos de vida incorporados (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 ciclo de vida default : compile , test , package , install , etc.

  3. Enchufar

    Un artefacto que proporciona uno o más objetivos.

    En función del tipo de empaquetado ( jar , war , etc.), los objetivos de los complementos están vinculados a las fases de forma predeterminada. ( Encuadernaciones de ciclo de vida incorporadas )

  4. Gol

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

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

Maven puede ser invocado con:

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

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

mvn clean dependency:copy-dependencies package


Los objetivos se ejecutan en fases que ayudan a determinar en qué orden se ejecutan los objetivos. La mejor comprensión de esto es observar los enlaces de ciclo de vida de Maven predeterminados que muestran qué objetivos se ejecutan en qué fases de forma predeterminada. Los objetivos de la fase de compilación siempre se ejecutarán antes de los objetivos de la fase de prueba, que siempre se ejecutarán antes de los objetivos de la fase del paquete y así sucesivamente.

Parte de la confusión se ve agravada por el hecho de que al ejecutar maven puede 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 ejecutará 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 creas una ejecución de plugin en tu archivo de compilación Maven y solo especificas el objetivo, se vinculará ese objetivo a una fase predeterminada dada. Por ejemplo, el objetivo jaxb: xjc se enlaza por defecto a la fase de generación de recursos. 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, se ejecutarán todas las fases hasta la fase para ese objetivo. En otras palabras, si especifica el objetivo del tarro, se ejecutarán todas las fases hasta la fase del paquete (y todos los objetivos en esas fases), y luego ejecutará el objetivo del tarro.