sábado, 20 de agosto de 2011

Iniciando con Maven


Maven es una herramienta para la construcción de proyectos en java, ya explicamos que es en este post http://emanuelpeg.blogspot.com/2011/02/maven.html ahora veamos como utilizarlo.


Instalar Maven:
  1. Bajar Maven de: http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-2.2.1-bin.zip, por ejemplo
  2. Copiarlo en un directorio en disco por ejemplo: c:\maven
  3. Agregar la carpeta bin de maven a la variable PATH. Para meter el subdirectorio bin en el path de ejecutables, le doy con el botón derecho del ratón sobre el icono de "Mi PC" y elijo "Propiedades", "Avanzado" y "Variables de Entorno". Busco "Path" y le doy a "Editar". Añado al final ";C:\maven\bin" (con punto y coma delante, para separlo de lo que ya haya escrito)
  4. Abrir una consola en windows ir a ejecutar y escribir “cmd”, en linux abrir cualquier consola y escribir:

> mvn --version

Y obtendrá la siguiente salida:

Apache Maven 2.2.1 (r801777; 2009-08-06 16:16:01-0300)
Java version: 1.6.0_25
Java home: /java/sdk/jdk1.6.0_25/jre
Default locale: es_AR, platform encoding: UTF-8
OS name: "linux" version: "2.6.35-22-generic" arch: "amd64" Family: "unix"

Configurar maven para que funcione utilizando una red con un proxy:

Es común el uso de proxies en empresas para brindar mayor velocidad en el uso de internet, en otros casos también es usado para restringir el uso de internet para algunos empleados. Es posible configurar maven para que funcione atra vez de un proxy.

Si la conexión a internet es a través de un proxy, necesitamos configurar maven para que sepa cómo acceder a través de él. El proxy puede además requerir un usuario y password para el acceso.
Vamos al directorio conf donde tenemos instalado maven, en mi caso c:\maven-2.0.4\conf y editamos el fichero settings.xml. Es un fichero xml y en el sitio que pone proxies, justo debajo, ponemos esto



optional
true
http
mi_nombre_usuario
mi_passowrd
ip_de_mi_proxy
80
ordenadores_de_mi_red_local_separados_por_comas

...

El id optional es un nombre que queramos darle para identificar el proxy. En vez de optional podemos poner cualquier nombre. especifica una lista separada por pipes (|) con los servidores o direcciones IP excentas de proxy.
Por ejemplo:



ConfigProxy
true
http
proxyuser
proxypass
10.10.10.1
8080
10.10.10.2|10.10.20.1



Creación de proyecto con Maven

Para crear un proyecto con maven hay que abrir la consola, y pocicionarse en la carpeta donde es necesario crear el proyecto y luego escribir en consola los siguiente:

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

Veamos los parámetros
  • archetype:create es el comando/plugin, o como quieras llamarlo, de maven para crear un proyecto. Por defecto crea un proyecto de java plano.
  • -DgroupId 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é "com.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.
  • -DartifactId 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
Al ejecutar este comando maven crea el proyecto y baja de internet los jar necesarios. Si todo salio bien vera el siguiente cartel:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30 seconds
[INFO] Finished at: Sat Aug 20 19:26:27 ART 2011
[INFO] Final Memory: 11M/490M
[INFO] ------------------------------------------------------------------------

La estructura del proyecto creado es la siguiente:

EjemploMaven
+---src
¦ +---main
¦ ¦ +---java //Para nuestros fuentes
¦ ¦ +---com
¦ ¦ +---ejemplos
¦ ¦ +---App.java
¦ +---test
¦ +---java //Para test de Junit
¦ +---com
¦ +---ejemplos
¦ +---AppTest.java
+---pom.xml

Dentro un fichero pom.xml que es un fichero que contiene datos de configuración de nuestro proyecto, como dependencias con otros jar, tipos de informes que queremos en la página web de nuestro proyecto, etc.. Inicialmente contiene una serie de cosas por defecto que podremos cambiar si lo deseamos.

Crea dos subdirectorios, uno src y otro test. Dentro de src debemos meter todo lo que sean fuentes y ficheros de configuración o datos propios del proyecto. En la parte de test debemos meter todos nuestros fuentes de prueba, clases de test de JUnit, ficheros de datos o de configuración de pruebas, etc. Es decir, en src va lo que es del proyecto y en test lo que nos ayude a probar el proyecto, pero no sea propio del proyecto.

En ambos casos, crea un directorio java. Ahí debajo es donde van los fuentes java. En paralelo a estos directorios java y si lo necesitamos, debemos crear nosotros a mano otros directorios. El nombre de estos nuevos directorios es standard en maven.

Para compilar la aplicación, por consola entramos al directorio EjemploMaven
y escribimos:

mvn compile

Si queremos correr los test 

mvn test 

Si queremos generar el empaquetado (jar, war, ear)

mvn package 

Si queremos correr los test + compilar + generar el empaquetado

mvn install

Al correr estos comandos generara una carpeta target, la cual contendra los archivos compilados y el jar generado. Si se quiere borrar esta carpeta y limpiar el proyecto se debe ejecutar:

mvn clean

Se pueden convinar los comandos por ejemplo borrar target y limpiar el proyecto para luego generar un paquete:

mvn clean install

Repositorios Maven

Una de las grandes ventajas de maven son los repositorios (almacenes) de ficheros jar que se crea.
Si miras en http://www.ibiblio.org/maven2/ tienes el repositorio oficial de jars de maven. 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

Adicionalmente podemos configurar maven para que use más repositorios, tanto de internet como otros que montemos internamente en nuestra red local si la tenemos. Por ejemplo, en internet tienes otro repositorio con jars independiente de maven en http://java.freehep.org/maven2/
El repositorio interno en la red local es particularmente útil si trabajamos en una empresa y hacemos proyectos que son dependientes unos de otros o tenemos nuestras propias librerías de jars. Poniendo jars en ese repositorio de empresa, todos los programadores podrán acceder o subir jars a ese repositorio y compartirlos.

Al hacer mvn install maven agrega nuestor jar al repositorio local de nuestra PC. Es decir que lo agrega a .m2

En próximos post seguiremos esta inicialización con Maven.