Buscar este blog

lunes, 20 de septiembre de 2010

MAVEN

En esta serie de entradas intentaremos tomar apuntes de los temas claves para comprender y usar MAVEN.

En esta entrada hablaremos de...
  1. Plugins y Goals
  2. LIFECYCLE
  3. COORDENADAS
  4. DEPENDENCIAS

Plugins y Goals
Una imagen vale más que mil palabras.
Efectivamente, podríamos decir que un plugin, es un conjunto de goals.

A nivel de línea de comandos, cuando podemos invocar un plugin y un goal de la siguiente forma:

mvn plugin:goal

Como por ejemplo cuando lanzamos:

mvn dependency:purgue-local-repository

En realidad lo que estamos haciendo es lanzar el goal purgue-local-repository del plugin dependency

Estos son algunos de los colorarios que podríamos arrojar sobre los GOALS
  • El goal, es la unidad básica de trabajo en MAVEN.
  • Un goal se puede ejecutar por si solo, o formar parte de un complejo proceso de construcción
  • MAVEN no sabe compilar tu proyecto. Se descarga el plugin y ejecuta el goal correspondiente. Como tampoco sabe empaquetar tu proyecto en un JAR.
LIFECYCLE
mvn install no es un goal específico de un plugin. Se trata de una fase en un LIFECYCLE.

Un lifecycle, es una secuencia ordenada de fases o pasos que conforman la construcción de un proyecto.

Una fase de un lifecycle, puede tener ninguno o varios goals asociados.

Cuando invocamos MAVEN con una fase, maven ejecuta todas las fases precedentes a dicha fase en determinado lifecycle (se entiende que si no se configura o especifica un lifecycle, se establece uno por omisión), hasta llegar a la fase indicada en la linea de comando.

Por lo tanto cuando ejecutamos mvn install, ejecuta compile, test y package previamente.

Un gráfico de como se ejecutan los goals asociados a un lifecycle:




Ejecutar mvn install tendría el mismo resultado que ejecutar:
mvn resources:resources \
compiler:compile \
resources:testResources \
compiler:testCompile \
surefire:test \
jar:jar \
install:install
En este ejemplo, especificaríamos el goal que deseamos usar.

COORDENADAS
Existen unos atributos a forma de coordenadas que permiten identificar un proyecto de forma unívoca.




Tal y como aparece en la imagen, podemos identificar las COORDENADAS de un proyecto en su pom.xml y la forma de hacer referencia única a dicho proyecto es la siguiente:

groupId:artifactId:packagin:version

Estos 4 parametros conforman lo que se llama ESPACIO MAVEN.

DEPENDENCIAS
Cuando creamos un proyecto maven, solo hay que indicar las dependencias directas de nuestro proyecto. Maven calcula las dependencias de estas dependencias.
Es decir, si necesitamos junit para testar nuestro proyecto, solo tenemos que indicar que depende de junit.
Las dependencias de junit, serán resueltas de forma automática.

Esto es lo que Maven denomina dependencias transitivas:

Las dependencias tiene un ámbito. Si indicamos que junit tiene el ámbito de test, no estará disponible para el goal compile.

En concreto el ámbito provided, indica que el contenedor de la aplicación (tomcat, weblogic...) proveerá dicha dependencia, no incluyendose dentro del empaquetado (war, ear...)

Esto puede ocasionar que un proyecto compile, y se empaquete, pero a la hora de desplegarse lance un error si dichas dependencias no están debidamente provistas (un típico ClassNotFoundException)

Fuente: manual de maven de SONATA

No hay comentarios:

Publicar un comentario