Maven - Parte II (Creando Aplicaciones)

Para crear una aplicación Java Simple con Maven debes ejecutar en tu consola:

1
$ mvn archetype:create -DgroupId=com.firefox -DartifactId=validate

Donde:

  • groupId: Es el package de referencia de tu aplicación.
  • artifactId: Es el nombre de tu aplicación (en maven se le llama artefacto)

Maven creará un directorio con el nombre del artefacto (aplicación), en este caso validate y la estructura de directorio quedará de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
.
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- firefox
| `-- App.java
`-- test
`-- java
`-- com
`-- firefox
`-- AppTest.java

Con esto queda lista la estructura básica de tu aplicación Java. En la estructura de directorios se pueden fijar que existen dos source folder el main y el de test. Además existe un archivo llamado pom.xml que nos permitirá administrar nuestro proyecto java, gestionar las dependencias del proyecto, generar el sitio web del proyecto al estilo maven o simplemente tareas simples como compilar, empaquetar o correr test unitarios.  Estas acciones o tareas son llamadas goals.

Algunas tareas simples (goals)

1
$ mvn compile

Esta acción lo que hace es compilar el proyecto dejando los binarios en el directorio target del proyecto de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.
|-- pom.xml
|-- src
| |-- main
| | `-- java
| | `-- com
| | `-- firefox
| | `-- App.java
| `-- test
| `-- java
| `-- com
| `-- firefox
| `-- AppTest.java
`-- target
`-- classes
`-- com
`-- firefox
`-- App.class
1
$ mvn clean

Limpia el proyecto, es decir, eliminar los compilados. Esta acción eliminará todas las clases compiladas ubicadas en el directorio target dentro del proyecto, este directorio es similar a los directorios build o bin que genera eclipse o netbean.

1
$ mvn package

Como su nombre lo dice, esta acción empaqueta la aplicación y deja el paquete en el directorio target.

1
$ mvn test

Esta acción corre los test unitarios guardados en el source folder de los tests.

Para que los test puedan correr, estos deben extender de TestCase de JUnit. Además los nombres de las clases deben seguir un estándar para su ejecución.

  1. Los nombres de las clases del tipo test deben terminar en Test, por ejemplo: ClientTest
  2. Dentro de la clase ClientTest deben existir métodos que hagan los test. Estos métodos deben ser public y ademas empezar con la palabra test.
  3. Dentro de los métodos puedes utilizar los assert para verificar la correcta ejecución del test unitario. Los assert son como su palabra lo dice aciertos, el método te pide como argumentos lo que tu esperas y lo que finalmente te devuelve la ejecucion del test. Si ambos resutados coinciden el test se ejecuta con resultado exitoso. También está la posibilidad de que los resultados sean distintos y en realidad es lo que tu esperas (que sean distintos) para que el test sea exitoso. Un pequeño ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import junit.framework.TestCase;

/**
* @author pcollaog
*
*/
public class MathTest extends TestCase {

public void testSumaBuena() {
int a = 1;
int b = 2;

int resultado = a + b;

int resultadoEsperado = 3;
assertEquals(resultado, resultadoEsperado);
}
}

Este ejemplo sale con un assert en true, es decir, se ejecuta con resultado exitoso. Es lo que se espera del test.

1
$mvn site

Esta acción te permite generar un sitio web estático con información referente al proyecto que estas realizando. La información que necesita para poder crear el sitio es referente al archivo **pom.xml **(más adelante hablaré de este archivo).

El sitio generado lo dejará en un directorio llamado site dentro del **target **, donde encontrarás un index.html que podras ver con tu navegador favorito (espero que sea firefox).

1
$mvn install

Esta acción compila, empaqueta e instala tu proyecto en un repositorio local de maven (generalmente se encuentra en ~/.m2/repository) . De esta forma puedes utilizar ese proyecto dentro de otro agregándolo como dependencia en el archivo pom.xml. Hay que tener como consideración que los proyectos instalados deben ser bien versionados.

1
$mvn eclipse:eclipse

Con esta acción puedes agregar los archivos necesarios para que puedas convertir un proyecto maven en un proyecto maven+eclipse. En lo posible ojalá puedas instalar el plugin de maven para eclipse.

Existen un montón de acciones (goals) más que funcionan con plugins de maven y que complementan algunas otras tareas.

Como verán maven hace muchas tareas tediosas en simples pasos que además te ayudan a optimizar tiempos de desarrollo, integraciones rápidas, actualización de librerías y documentación de tu proyecto.

Maven - Parte I (Instalación)

En esta serie de artículos pretendo explicar el funcionamiento a grandes rasgos de Maven.

Primero… ¿ qué es Maven y para qué sirve ?

Maven es una herramienta para la gestión de proyectos java desde el lado del desarrollador, es decir, un automatizador de tareas al estilo de ant task. Más adelante veremos las cosas que puede hacer con mas detalle, pero entre las actividades diarias que hace de un desarrollador java están:

  • compilar
  • correr test unitarios
  • empaquetar
  • levantar webserver o application server
  • manejo de dependencias del proyecto

Instalando Maven

Primero debes descargar el binario de maven desde su pagina oficial.

  1. Debes descomprimir el archivo y guardarlo en un directorio conocido.
  2. Luego debes agregar al PATH el directorio bin para que puedas ejecutar maven.
1
2
3
4
5
6
7
8
9
10
11
12
13
$ tar zxvf maven-2.0.7-bin.tar.gz
maven-2.0.7/conf/
maven-2.0.7/boot/classworlds-1.1.jar
maven-2.0.7/LICENSE.txt
maven-2.0.7/NOTICE.txt
maven-2.0.7/README.txt
maven-2.0.7/bin/m2.bat
maven-2.0.7/bin/m2.conf
maven-2.0.7/bin/mvn.bat
maven-2.0.7/bin/m2
maven-2.0.7/bin/mvn
maven-2.0.7/conf/settings.xml
maven-2.0.7/lib/maven-core-2.0.7-uber.jar

Luego agregar al PATH el directorio bin:

1
$ export PATH=$PATH:/home/usuario/maven/bin

Debemos comprobar la versión de java que estamos utilizando en el sistema:

1
2
3
4
$ java -version
java version "1.5.0_13"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05)
Java HotSpot(TM) Client VM (build 1.5.0_13-b05, mixed mode, sharing)

Ahora podemos comprobar que maven esta bien instalado:

1
2
3
4
$ mvn -v
Maven version: 2.0.7
Java version: 1.5.0_13
OS name: "linux" version: "2.6.22-14-generic" arch: "i386"

Resolución de algunos problemas

A veces es muy recomendable agregar en el script que ejecuta maven el JAVA_HOME, asi maven no se confunde de java si es que tienen varias JVM instaladas.

Editar el siguiente archivo /home/usuario/maven/bin/mvn:

1
2
3
4
5
6
7
8
9
# ------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

También puedes configurar tu JVM por defecto de la siguiente manera en ubuntu/debian:

1
2
3
4
5
6
7
8
# update-alternatives --config java
Hay 2 alternativas que proveen `java'.
Selección Alternativa
-----------------------------------------------
  1 /usr/bin/gij-4.2
*+ 2 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
Pulse <Intro> para mantener el valor por omisión
[*] o pulse un número de selección: