jueves, 25 de agosto de 2011

MAVEN - Conceptos Básicos

Instalación de Maven

http://maven.apache.org/download.html#Installation



Crear un proyecto con Maven

El primer paso que podemos hacer con maven es crear un proyecto desde cero. El comando de maven que tenemos que ejecutar es

mvn archetype:create -DgroupId=chuidiang.ejemplos -DartifactId=EjemploMaven



Veamos los parámetros

1. archetype:create Es el comando/plugin, de maven para crear un proyecto. Por defecto crea un proyecto de java simple (nada de aplicación web, aunque también se puede)

2. -DgroupId=chuidiang.ejemplos Es el conjunto de proyectos al que pertenece nuestro proyecto. Por ejemplo, yo puedo meter todos mis programas de ejemplo en un grupo que llamaré "chuidiang.ejemplos". Este nombre que pongamos aquí va a servir de paquete inicial para todas las clases del proyecto. Todos los proyectos maven deben pertenecer a un grupo, aunque sea único para él, que se denominará groupId.

3. -DartifactId=EjemploMaven Es el nombre que queramos dar al proyecto. Maven creará un directorio con este nombre y el jar que genere para el proyecto tendrá también este nombre. Todos los proyectos maven tienen un nombre para identificarlos, que se denomirá artifactId



Maven crea el paquete inicial chuidiang.ejemplos (como lo indicamos en el comando anterior), según indicamos en el groupId y en él mete un par de ficheros java de muestra, App.java y AppTest.java. Normalmente estos ficheros los borraremos, salvo que queramos aprovechar el nombre.

Una vez ejecutado este comando, Maven empezará a bajarse cosas de internet cuando lo ejecutemos por primera vez (en los próximos proyectos ya no necesita bajarse nada).


Al crear el proyecto, maven automáticamente va a empezar a descargar ciertas libreras y las va a colocar en nuestro repositorio local.




Vemos un poquito mas en detalle este archivo tan importante - POM.XML

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>chuidiang.ejemplos</groupId>
  <artifactId>EjemploMaven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>EjemploMaven</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>

Aqui vemos como esta armado el POM (que se creo con el comando anterior) que sera el archivo que usara maven para compilar, ejecutar los test, etc, nuestro proyecto. Observamos que el proyecto creado solo necesita una libreria (JUnit) y no para se usada a la hora de compilar el proyecto sino a la hora de ejecutar los test.
Repositorios (como para tener una idea)

Por defecto, maven descargara los artefactos (librerías) del repositorio central, sin embargo no todas las librerias están allí. Existen otros repositorios publicos donde encontraremos mas librerías. Para poder utilizar otras librerías que no están en los repositorios centrales de maven tenemos dos opciones. 

  • O bien la descargamos de internet, y la instalamos de forma manual a nuestro repositorio local (mas adelante mostraremos esto mismo con las librerías del driver de oracle)
  • O bien, agregando otras locaciones de repositorios en el POM

Ejemplo

<repositories>

    <repository>
      <id>java.net</id>
      <url>http://download.java.net/maven/2</url>
    </repository>

    <repository>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <layout>default</layout>
      <url>http://repo1.maven.org/maven2</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>

  </repositories>

Una de las grandes ventajas de maven son los repositorios (almacenes) de ficheros jar que se crea.

Algunos repositorios oficiales
  • http://www.ibiblio.org/maven2/ 
  • http://repo1.maven.org/maven2/log4j/ (este no se puede browsear mas, y para eso hicieron esto: http://search.maven.org/#browse)
Ahí están los groupId de casi todos los jar de libre distribución que puedas encontrar en internet. 
Tienes el log4j, commons-logging, JFreeChart, mysql-connector, etc, etc. 
Maven es capaz de bajarse cualquiera de estos jar si tu proyecto lo necesita.

Todo lo que se baje maven de internet lo mete en un repositorio (almacen) local en tu pc, de forma que si lo necesita una segunda vez, no necesita descargárselo nuevamente de internet. Este directorio, habitualmente está en
  • $HOME/.m2 en unix/linux
  • C:\Documents and Settings\usuario\.m2 en windows
Es más, los deja con una estructura similar a la del respositorio, creando subdirectorios por groupId, por artifactId y por version. Cuando compilamos con mvn compile o mvn package, maven mira primero si los jar que necesitan ya están en el respositorio local en $HOME/.m2/repository. Si ya están los usa sin más. Si no están, los busca en internet, los pone en nuestro $HOME/.m2/repository y los usa.

Si dependemos de un jar en versión SNAPSHOT (el SNAPSHOT es para indicar que una versión está en construcción, que no es definitiva), maven mirará de qué fecha es el jar que tenemos en nuestro repositorio $HOME/.m2/repository y aunque ya lo tengamos, si es anterior al día de hoy, ira de todas formas a internet a ver si hay una versión más moderna. Si la hay, se la bajará y será la que utilice. Esto no sucede con las versiones normales no SNAPSHOT (por ejemplo, log4j-1.2.13.jar). 
Maven considera que esa versión es estable y no se va a modificar más, por lo que si la tenemos en nuestro $HOME/.m2/repository, no irá a internet a ver si hay una más moderna.

Finalmente, si dentro de nuestro ordenador tenemos varios proyectos maven y queremos usar los jar que hemos generado en uno de ellos en otro de los proyectos, podemos subir esos jar al repositorio local. El comando es mvn install. Este comando compila, pasa los test de JUnit, genera el jar y lo sube a nuestro $HOME/.m2/repository con el groupId, artifactId y versión que hayamos decidido cuando creamos el proyecto. En el momento que este jar está en nuestro $HOME/.m2/repository, ya está accesible para cualquier otro proyecto maven en el mismo ordenador.


Compilar el proyecto creado

Una vez que tenemos todo, podemos compiliar de forma sencilla. Basta ponerse en el directorio donde está el fichero pom.xml y escribir.

mvn compile

Compila las clases y genera los .class. Al hacerlo, creará un directorio target debajo del proyecto, debajo de él un directorio classes y ahí irá metiendo los .class que genere.




Generar el JAR del proyecto compilado anteriormente

Para generar el jar, es igual de sencillo

mvn package

Compila las clases si no están ya compiladas y genera en el directorio target el fichero .jar de nuestro proyecto. Es decir, primero compilará si es necesario, pasará las clases de test de JUnit y si no hay fallos, meterá en el directorio target nuestro jar, que por defecto tendrá un nombre como este



EjemploMaven-1.0-SNAPSHOT.jar

Maven añade un 1.0 para indicar que es la versión 1.0 de nuestro proyecto. Este número aparece y podemos cambiarlo en el fichero pom.xml. Lo de -SNAPSHOT es para indicar que esta versión está en construcción, que no es definitiva. Maven irá guardando todas las versiones del jar que generemos e irá sustituyendo -SNAPSHOT por la fecha y hora de la construcción.

La parte SNAPSHOT para maven significa que es un proyecto todavía en desarrollo y que esta versión no es definitiva.

Más adelante veremos que maven trata de forma especial los jar cuyas versiones terminen en SNAPSHOT.

Esto de -SNAPSHOT también aparece en el pom.xml y podemos quitarlo cuando creamos que tenemos la versión definitiva.


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>chuidiang.ejemplos</groupId>
  <artifactId>EjemploMaven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>



....
....
....
</project>

No es necesario ejecutarlos en orden (primero el mvn compile y despues el mvn package), si ejecutamos directamente mvn package, veremos como se van compilando las clases y se genera el jar, que quedará en el directorio target.

Vemos como nos queda el directorio target después de ejecutar el comando mvn package (todos los subdirectorios que se crearon como el classes, test-classes, etc)





Borramos lo compilado

Hasta ahora vimos que se ha generado un directorio target en el que se han metido los .class, los resultados de los test de JUnit debajo del subdirectorio surefire-reposts y el jar de nuestro proyecto.

Finalmente, el siguiente comando eliminará el directorio target con todo su contenido. Se suele ejecutar si queremos compilar todo desde cero.

mvn clean

Si no lo ejecutamos, maven mirará si los .java son más modernos que los .class existentes para compilar sólo los que han sufrido modificaciones.

Vemos como nos quedo el proyecto cuando ejecutamos este comando (vemos que no tenemos mas el directorio target)



Instalar nuestro JAR al repositorio local

Esto significa que vamos a copiar el JAR generado anteriormente en el repositorio local. Es decir, este comando compila, pasa los test de JUnit, genera el jar y lo sube a nuestro $HOME/.m2/repository con el groupId, artifactId y versión que hayamos decidido cuando creamos el proyecto.

mvn install

Esto instalara el JAR en:

C:\Documents and Settings\Damian Ciocca\.m2\repository\chuidiang\ejemplos\EjemploMaven\1.0-SNAPSHOT

Esta operación hace que el JAR esté disponible para otros proyectos maven que tengamos en nuestro ordenador. Es útil, por tanto, para proyectos maven que sean librerías nuestras que queramos usar en varios proyectos.



Lo de -SNAPSHOT en la versión tiene aquí su gracia. Si dependemos de un jar que tenga -SNAPSHOT, cada vez que compilemos, aunque ese jar esté en nuestro repositorio local, maven ira a buscarlos a los repositorios comunes o de internet, para ver si hay una versión de fecha más moderna. Si la hay, se la bajará. Por tanto, suele ser útil en un equipo de trabajo mantener la "coletilla" -SNAPSHOT en los jar que todavía están en desarrollo y sufren cambios frecuentes.


Crear otro tipo de proyectos (solo para tenerlo en cuenta)

El comando mvn archetype:create es un comando obsoleto.

Maven aconseja ahora ejecutar mvn archetype:generate. Si lo ejecutamos sin parámetros, nos ira preguntado un montón de cosas:

Primero el tipo de proyecto a generar, entre 41 posibles: proyectos appfuse, hibernate, spring, cocoon, groovy, etc, etc, (por defecto, un jar simple)
groupId
artifactId
version (por defecto 1.0-SNAPSHOT)
paquete inicial de las clases (por defecto lo que hemos puesto en groupId)
Confirmación de los datos introducidos para crear el proyecto.

Según qué tipo de proyecto, maven creará la estructura de una forma u otra, generará determinados ficheros de ejemplo en determinados directorios (como en el caso del App.java con un "Hola Mundo" como acabamos de ver) y lo más importante de todo, nos bajará de internet todos los jar de los que dependemos y los colocará en un sitio en que él pueda encontrarlos cuando compile.


Agregamos una nueva dependencias de nuestro proyecto (desde el repositorio publico de maven)

Una vez que sabemos que hay un montón de JARs por el mundo a nuestra disposición, sólo tenemos que saber cómo hacer que maven se los baje cuando nosotros queramos.

Supongamos que querramos incluir la libreria de log4j... Browseamos por el repositorioa publico de Maven y buscamos la libreria hasta llegar al POM

http://mirrors.ibiblio.org/pub/mirrors/maven2/log4j/log4j/1.2.14/




Ahí vemos el groupId, artifactId y versión del log4j que queremos (ver URL siguiente).

http://mirrors.ibiblio.org/pub/mirrors/maven2/log4j/log4j/1.2.14/log4j-1.2.14.pom


NOTA: En http://mvnrepository.com/ poniendo en la caja de búsqueda el nombre de la librería (por ejemplo, mysql) nos irá mostrando opciones y navegando por ellas, pulsando al final en "details", tendremos el <dependency> completo que tenemos que poner en maven

Ahora editamos nuestro pom.xml y le añadimos la dependencia donde nos quedaria asi:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>chuidiang.ejemplos</groupId>
  <artifactId>EjemploMaven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>EjemploMaven</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.14</version>
      <scope>compile</scope>
    </dependency>
    
  </dependencies>
</project>


Esta vez hemos puesto "compile" en vez de "test" para indicar que lo necesitamos a la hora de compilar nuestro proyecto.

Cuando compilemos la primera vez, maven mirará si ya tenemos log4j en nuestro repositorio local y si no lo tenemos, se irá a buscarlo a internet y lo bajará. El log4j quedará en nuestro repositorio local.

Luego volvemos a ejecutar mvn compile sobre el directorio raiz (EjemploMaven). Vemos como por consola vemos como maven descargar la libreria que agregamos como dependencia en el POM.




Agregamos una nueva dependencias de nuestro proyecto (de forma manual)


1. Descargar el JAR desde Internet manualmente
2. Nos situamos donde esta el JAR (ej. E:\APIs\oracle\ojdbc14.jar)
3. Procedemos a instalar dicho JAR en el repositorio local (M2) mediante el siguiente comando

mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=com.oracle -DartifactId=oracle -Dversion=10.2.0.3.0 -Dpackaging=jar -DgeneratePom=true

Esta libreria quedo instalada en:
C:\Documents and Settings\Damian Ciocca\.m2\repository\com\oracle\oracle\10.2.0.3.0

Y ahora procedemos a modificar el POM agregando la siguiente dependencia:

   <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>oracle</artifactId>
      <version>10.2.0.3.0</version>
      <scope>compile</scope>
  </dependency>


Integración con los IDE (en este caso, vamos a integrarnos con Eclipse)

Antes que nada vamos a instalar el plugin para el eclipse para poder integrar maven:
http://www.eclipse.org/m2e/


Ingresamos la URL http://download.eclipse.org/technology/m2e/releases/

En primer lugar, vamos a verificar que nuestro eclipse tenga correctamente instalado maven
El settings.xml que viene dentro del maven/conf tenemos que copiarlo en .m2/



Luego verificamos que el plugin de maven este correctamente apuntando al repositorio


Una vez que tengamos correctamente apuntando al repositorio local el eclipse, procedemos con los siguiente pasos.

Para crear nuestro proyecto eclipse, nos basta con ejecutar el comando mvn eclipse:eclipse en el directorio raíz de nuestro proyecto.
Esto creará los ficheros .project y .classpath que definen un proyecto de eclipse.

mvn eclipse:eclipse




Una vez creados los ficheros, nos vamos a eclipse e importamos el proyecto. 

En eclipse seleccionamos  "File" -> "Import" -> "General" -> "Existing projects into workspace". (en este ejemplo se opta por copiar el proyecto EjemploMaven dentro del worskpace del eclipse)

NOTA: Otra forma de importar el proyecto es directamente como proyecto Maven, mediante File -> Import -> Maven -> Existing Maven project. De esta manera, nos evitamos todos los pasos que se detallaran  a continuación. 

Nos aparecerá una ventana en la que podemos seleccionar el directorio raíz de nuestro proyecto y al aceptar, aparecerá nuestro proyecto listo para importar. Lo seleccionamos y aceptamos.

Una vez importado el proyecto, hay una cosa que debemos hacer una sola vez en nuestro workspace de eclipse, que es definir una variable que apunte al sitio donde maven guarda los jars que se descarga de internet. Esto se hace en "Window" -> "Preferences" -> "java" -> "Build path" -> "Classpath variables". 

Pulsamos el botón "new" para crear una nueva variable de nombre M2_REPO y que apunte al sitio donde maven tiene los jars. La ubicación por defecto en $HOME/.m2/repository. Verificar que ya exista esta variable.


Luego nos paramos sobre el proyecto, clic derecho, Maven, Enabled Dependency Managment.
Vemos que el proyecto nos queda con una M muy chiquita. Esto significa que el proyecto esta asociado a Maven y cualquier cambio que se haga en el POM, sera reflejado automáticamente en el proyecto.


Luego verificamos los JARs en el java build path y vemos lo siguiente



Ahora vamos a cambiar la version del log4j a 1.2.4 (modificamos el pom cambiando solamente la version del log4j) grabamos el cambio

Vamos a ver por consola esto:

8/25/11 9:18:36 AM GMT-03:00: Refreshing [/EjemploMaven/pom.xml]
8/25/11 9:18:36 AM GMT-03:00: Downloading http://repo1.maven.org/maven2/log4j/log4j/1.2.4/log4j-1.2.4.pom
8/25/11 9:18:36 AM GMT-03:00: Downloaded http://repo1.maven.org/maven2/log4j/log4j/1.2.4/log4j-1.2.4.pom
8/25/11 9:18:37 AM GMT-03:00: Downloading http://repo1.maven.org/maven2/log4j/log4j/1.2.4/log4j-1.2.4.jar
8/25/11 9:18:43 AM GMT-03:00: Downloaded http://repo1.maven.org/maven2/log4j/log4j/1.2.4/log4j-1.2.4.jar
8/25/11 9:18:43 AM GMT-03:00: Maven Builder: AUTO_BUILD 
8/25/11 9:18:45 AM GMT-03:00: Maven Builder: AUTO_BUILD requireFullBuild
8/25/11 9:18:45 AM GMT-03:00: [INFO] Using 'UTF-8' encoding to copy filtered resources.
8/25/11 9:18:45 AM GMT-03:00: [INFO] skip non existing resourceDirectory E:\wc_maven\EjemploMaven\src\main\resources
8/25/11 9:18:45 AM GMT-03:00: [INFO] Nothing to compile - all classes are up to date
8/25/11 9:18:45 AM GMT-03:00: [INFO] Using 'UTF-8' encoding to copy filtered resources.
8/25/11 9:18:45 AM GMT-03:00: [INFO] skip non existing resourceDirectory E:\wc_maven\EjemploMaven\src\test\resources

Automáticamente se descargo la nueva libreria de log4j y se actualizo en nuestro java build path del proyecto.

Luego, volvemos a la version anterior del log4j (1.2.14) (modificamos el pom cambiando solamente la version del log4j)

Y ahora vemos que por consola salio esto:

8/25/11 9:21:15 AM GMT-03:00: Refreshing [/EjemploMaven/pom.xml]
8/25/11 9:21:15 AM GMT-03:00: Maven Builder: AUTO_BUILD 
8/25/11 9:21:16 AM GMT-03:00: Maven Builder: AUTO_BUILD requireFullBuild
8/25/11 9:21:16 AM GMT-03:00: [INFO] Using 'UTF-8' encoding to copy filtered resources.
8/25/11 9:21:16 AM GMT-03:00: [INFO] skip non existing resourceDirectory E:\wc_maven\EjemploMaven\src\main\resources
8/25/11 9:21:16 AM GMT-03:00: [INFO] Nothing to compile - all classes are up to date
8/25/11 9:21:16 AM GMT-03:00: [INFO] Using 'UTF-8' encoding to copy filtered resources.
8/25/11 9:21:16 AM GMT-03:00: [INFO] skip non existing resourceDirectory E:\wc_maven\EjemploMaven\src\test\resources

Aqui vemos como Maven no descargo nada ya que esa version del log4j la tenemos en el repositorio local.

Asi es como nos queda un proyecto integrado con maven en eclipse y con las 3 dependencias segun el POM.



Creacion de releases - IMPORTANTE

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=Release_Maven

Utilización de una aplicación para browsear los artefactos (releases y snapshots) - Artifactory

http://www.queres.es/weblog/?p=11

JDKs, MAVEN y los TESTs

Maven utilizara el compilador que indique en su POM para compilar los fuentes


<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.0.2</version>
      <configuration>
       <executable>${jdk6_javac}</executable> <!--  Esto sale del setting.xml -->
<source>1.6</source>
<target>1.6</target>
      </configuration>
    </plugin>
  </plugins>
</build>

En el setting.xml que iría en el repositorio local


<properties>
<jdk_java>c:\Progra~2\Java\jdk1.5.0_22\bin\java.exe</jdk_java>
<jdk_javac>c:\Progra~2\Java\jdk1.5.0_22\bin\javac.exe</jdk_javac>
<artifactory.dav.url>dav:http://10.105.80.40:8081/artifactory </artifactory.dav.url>
<jdk5_java>c:\Progra~2\Java\jdk1.5.0_22\bin\java.exe</jdk5_java>
<jdk5_javac>c:\Progra~2\Java\jdk1.5.0_22\bin\javac.exe</jdk5_javac>
<jdk6_java>c:\Progra~2\Java\jdk1.6.0_35\bin\java.exe</jdk6_java>
<jdk6_javac>c:\Progra~2\Java\jdk1.6.0_35\bin\javac.exe</jdk6_javac>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</properties>



Un tema importante es que a la hora de correr los tests se tiene que tener en cuenta que los test pueden correr con otra JVM por lo tanto se puede explicitar (para evitar problemas) con que JVM que se deben correr los test. De esta manera se logra tener una uniformidad con las JVMs que se utilizan tanto para la compilacion como para la ejecucion de test

http://fraguadigital.blogspot.com.ar/2009/06/maven-surefire-plugin.html
http://www.sonatype.com/books/mvnex-book/reference/customizing-sect-executing-tests.html.


<build>
  <plugins>
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <jvm>${jdk6_java}</jvm> <!--  Esto sale del setting.xml -->
      </configuration>
    </plugin>
  </plugins>
</build>

En caso que necesitemos configurar varias JDK y correr maven con distintas JDKs

http://wiki.fluxit.com.ar/display/PUBLIC/Maven+y+Diferentes+JDK

Maven Assembly

1. Empaquetado de aplicaciones standalone:

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=maven_standalone_app

2. Empaquetado de aplicaciones standaolone de un modulo que requiere tener montado todo el entorno de la capa de servicios de nuestra aplicacion:

Estamos hablando de aplicaciones JEE, lo suficientemente bien modularizadas y la necesidad consiste en ejecutar una aplicación standalone, que tenga accesibles los mismos servicios que tendría el módulo web

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=Maven-assembly-plugin-batchProcess
http://chuwiki.chuidiang.org/index.php?title=Hacer_un_zip_para_distribuir

Ejemplo del assembly.xml

Aquí encontramos los tags con su explicación detallada: http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

<?xml version="1.0" encoding="UTF-8"?>  
<assembly>  
    <!-- Yo le doy este identificador para mis aplicaciones -->  
    <id>standaloneapp-dist-format</id>  
  
    <!-- 
        http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html 
    -->  
    <formats>  
        <!-- La salida será un directorio -->  
        <format>dir</format>  
    </formats>  
  
    <!--  
        Generará la salida a la carpeta dist al mismo nivel del pom.xml..  
        manias, me gusta así  
    -->  
    <baseDirectory>../../dist</baseDirectory>  
  
    <fileSets>  
        <!--  
            Copiamos todos los jar del directorio "target" (donde compila maven)  
            al directorio de salida "baseDirectory" es decir, sólo copiará el jar  
            propio de la aplicación  
        -->  
        <fileSet>  
            <directory>target</directory>  
            <outputDirectory>.</outputDirectory>  
            <includes>  
                <include>*.jar</include>  
            </includes>  
        </fileSet>  
    </fileSets>  
  
    <dependencySets>  
        <dependencySet>  
            <!-- Las dependencias irán al directorio lib -->  
            <outputDirectory>lib</outputDirectory>  
  
            <!--  
                Que genere las dependencias como JAR y no como .class en sus  
                subdirectorios  
            -->  
            <unpack>false</unpack>  
  
            <!-- Que sólo genere las dependencias runtime -->  
            <scope>runtime</scope>  
  
            <!-- 
                El JAR propio de la aplicación no lo incluimos en el directorio lib 
            -->  
            <excludes>  
                <exclude>${groupId}:${artifactId}</exclude>  
            </excludes>  
        </dependencySet>  
    </dependencySets>  
</assembly>  


Otro ejemplo:


<assembly  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>all</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>src/main/assembly/resources</directory>
<excludes>
<exclude>*.properties</exclude>
</excludes>
<outputDirectory>/resources</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/assembly/resources</directory>
<includes>
<include>*.properties</include>
</includes>
<outputDirectory>/conf</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/assembly/bin</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>target</directory>
<outputDirectory>/bin</outputDirectory>
<excludes>
<exclude>*-tests.jar</exclude>
<exclude>*-test-sources.jar</exclude>
<exclude>*-javadoc.jar</exclude>
</excludes>
<includes>
<include>*.jar</include>
</includes>
</fileSet>

<!-- Only way I found to *create* an empty directory -->
<fileSet>
<directory>src/main/assembly/resources</directory>
<outputDirectory>/logs</outputDirectory>
<excludes>
<exclude>*</exclude>
</excludes>
</fileSet>

<fileSet>
<directory>src/main/assembly/db-install-scripts</directory>
<outputDirectory>/db-install-scripts</outputDirectory>
</fileSet>
</fileSets>
</assembly>




Maven Tests

Maven por default mediante el plugin surefire no ejecuta los test de integracion (*IntegrationTest.java), solo ejecutara los test unitarios (*Test.java)

http://stackoverflow.com/questions/1399240/how-do-i-get-my-maven-integration-tests-to-run

Run test

mvn test

Skiping test

mvn install -Dmaven.test.skip=true




Bilbiografia

http://chuidiang.org/content/maven
http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
http://www.chuidiang.com/java/herramientas/maven.php
http://chuwiki.chuidiang.org/index.php?title=Integraci%C3%B3n_de_Maven_y_Eclipse#Importar_un_proyecto_maven_en_eclipse
http://www.springfuse.com/install-oracle-jdbc-driver-in-maven-repository.html

1 comentario: