Chuleta Maven

UPDATE 20100126: Añadido cómo configurar el máximo de memoria heap

A continuación una chuleta con buena parte de lo que llevo aprendido usando Maven estos dos últimos meses más algunas referencias.

> 1. CREAR PROYECTOS


Crear un proyecto jar

$ mvn archetype:create -DgroupId=com.example -DartifactId=example-jar-project

Crear un proyecto war
$ mvn archetype:create -DarchetypeartifactId=maven-archetype-webapp -DgroupId=com.example -DartifactId=example-war-project


> 2. ECLIPSE


Configurar plugin eclipse para descargar fuentes y javadocs de las dependencias


<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<!-- Ojo, la versión 2.6 tiene bugs con AJDT -->
<version>2.5</version>
<configuration>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>

Crear variable M2_REPO
Ir a Window -> Preferences -> Java -> Build path -> Classpath variable -> New
Name: M2_REPO
Path: /ruta/a/tu/.m2/repository

Generar ficheros de configuración de un proyecto jar Eclipse
$ mvn eclipse:eclipse

Generar ficheros de configuración de un proyecto war Eclipse
$ mvn eclipse:eclipse -Dwtpversion=1.5

Cargar un proyecto en Eclipse
Ir a File -> Import -> General -> Existing project into Workspace -> Select root directory

Borrar ficheros de configuración proyecto Eclipse
$ mvn eclipse:clean

Ahora más que nunca, se recomienda no subir a CVS o similar los ficheros de configuración del proyecto en el IDE.



> 3. CONFIGURACIÓN DE PLUGINS MÁS COMUNES


Configurar un plugin para este pom y sus hijos

En build -> pluginManagement -> plugins

Configurar un plugin sólo para este pom
En build -> plugins

Configurar encoding y versión java de compilación

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.4</source>
<target>1.4</target>
</configuration>
</plugin>

Configurar plugin surefire para ignorar fallos de tests, definir patrones de nombres de tests aceptados y configurar propiedades de sistema (locale) durante la ejecución de los tests

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<includes>
<include>**/*Test.java</include>
<include>**/*Tests.java</include>
</includes>
<systemProperties>
<property>
<name>user.language</name>
<value>es</value>
</property>
<property>
<name>user.country</name>
<value>ES</value>
</property>
</systemProperties>
</configuration>
</plugin>


> 4. COMANDOS ÚTILES EN EL DÍA A DÍA


Borrar carpeta de construcción

$ mvn clean

Ejecutar tests
$ mvn test

Construir proyecto
$ mvn package

Instalar proyecto en tu repositorio local
$ mvn install

Instalar (desplegar) proyecto en el repositorio de la organización (necesita configuración)
$ mvn deploy

Ejecutar Maven saltándose los tests (unitarios e integración)
$ mvn xxxxxxx -Dmaven.test.skip=true

Mostrar el stacktrace de excepción
$ mvn xxxxxxx -e

Mostrar información de debug
$ mvn xxxxxxx -X

Instalar una libreria de terceros en tu repositorio local
mvn install:install-file -Dfile=ruta/a/fichero/jar -DgroupId=com.example -DartifactId=nombre_libreria -Dversion=x.y.z -Dpackaging=jar

Instalar (desplegar) una libreria de terceros en el repositorio de la organización (necesita configuración)
$ mvn deploy:deploy-file -Dfile=ruta/a/fichero/jar -DrepositoryId=id_repositorio -Durl=url_repositorio -DgroupId=com.example -DartifactId=nombre_libreria -Dversion=x.y.z -Dpackaging=jar

Ver pom efectivo (suma de poms padres)
$ mvn help:effective-pom

Ejecutar Maven en modo offline
$ mvn xxxxxxx -o

Preparar Maven para poder ejecutarse en modo offline
$ mvn dependency:go-offline

Ejecutar Maven con máximo de memoria heap configurable (ejemplo con 512m)
$ mvn xxxxxxx -DXmx512m
o editar la variable de sistema MAVEN_OPTS=-Xmx512m


> 5. DEPENDENCIAS


Ver jerarquía de dependencias

$ mvn dependency:tree

Ver dependencias en orden alfabético
$ mvn dependency:resolve

Analizar uso de dependencias
$ mvn dependency:analyze



> 6. RECURSOS


Ciclos de vida

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Estructura estándar de carpetas
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

Propiedades
http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide

Pom
http://maven.apache.org/ref/2.2.1/maven-model/maven.html

Plugins más comunes
http://maven.apache.org/plugins/index.html

Documentación oficial
http://maven.apache.org/guides/index.html

Libro gratuito: Maven La Guía Definitiva
http://www.sonatype.com/books/maven-book/reference/

Gestor de repositorios Nexus
http://nexus.sonatype.org/index.html

6 comentarios :: Chuleta Maven

  1. Una propiedad que he encontrado especialmente útil mientras haces testing en tu máquina es :
    $ mvn XXXXXXXX -D surefire.useFile=false

    De esa forma todas las trazas de testeo se muestran en consola, y no tienes que abrir el report generado en el target.

    Ah, y felicidades por empezar a usar maven: después del doloroso comienzo (si tienes una aplicación seam formada por un montón de módulos y quieres configurar unit testing de EJB ;-)) las ventajas obtenidas son ENORMES.
    Salu2

  2. Muy util el post voy a hacer referencia a el desde mi blog.

    http://emanuelpeg.blogspot.com/2009/08/maven-para-desmemoriados.html

    Muchas Gracias!!!

  3. El comienzo es duro sí. Aún es rara la semana que no tengo que aprender algo nuevo. Pero merece la pena. Cuesta aprender, pero luego se reutiliza en un instante.
    En mi caso han sido 2 proyectos de servicios web con Axis2. Ya publicaré algo...

    Me alegro que os haya parecido útil!

  4. Hola Julio, pues me gusto el post, pero tengo una duda, si yo agrego o modifico una version de alguna dependencia dentro del pom.xml me toca modificar a mano el .classpath del Eclipse para tomar estos cambios? O como...

    Gracias.

    dracof.

  5. Hola dracof.

    Me alegra que te gustara. Lo que dices se puede hacer simplemente regenerando la configuración de eclipse o sólo actualizandola con >mvn eclipse:clean eclipse:eclipse

    Otra opción es usar alguno de los plugins de Eclipse para Maven como m2eclipse o el hispanizado IAM que te hacen la vida un poco más fácil. Aunque yo recomiendo primero aprender bien Maven y luego usar uno de estos plugins.

  6. Hola Julio,

    Lo primero felilcitarte por el blog me ha servido mucho de ayuda. Te comento: llevo un par de días leyendo sobre Maven pero no me entero muy bien y tengo algunas dudas.

    ¿Son SVN (Subversion) y Maven complementarios?
    Yo utilizo SVN como repositorio de control de versiones, ¿podría Maven solucionarme los errores de dependencias de librerías cuando hago un checkout de un proyecto concreto?

    Gracias de antemano.

Publicar un comentario