Actualmente, cuando se empieza en un nuevo proyecto Java se suele usar alguna build tool, la cual ayude en la administración del proyecto. De acuerdo al artículo previo Evolución de build tools, algunas de las herramientas que existen actualmente son: maven y gradle. A continuación, hablaremos de maven.

Maven es un proyecto Open Source bajo Apache Software Foundation. Actualmente, se encuentra en la versión 3.3.9, mientras que la versión 3.4.0 se encuentra en desarrollo para dar soporte a Java 9, en especial para brindar soporte de módulos (haciendo referencia al Proyecto Jigsaw).

Qué es Maven?

Maven es una herramienta de construcción ó build tool, la cual ayuda a que el proceso de construcción del proyecto sea fácil (aquellos que conocen Ant saben a lo que me refiero).

Maven provee:

  • Estructura estándar

  • Manejo y administración de dependencias

  • Manejo y administración de plugin

  • Reportes, etc

Maven se caracteriza por tener toda su definición bajo una estructura xml en un archivo llamado pom.xml.

Qué es POM?

POM (Project Object Model, por sus siglas en inglés), es la unidad de trabajo en maven. Es un archivo xml que contiene toda la información del proyecto y configuraciones que son utilizadas por maven a la hora de la construcción del proyecto. Dentro del archivo podemos definir:

  • Dependencias

  • Plugins

  • Referencia al Source Control Management

  • Lista de módulos

  • Repositorios, etc

Empezando con Maven

Primero, descargar la última versión de maven del siguiente enlace.

NOTA: Requiere JDK 7 o superior.

En mi caso, ubicaré el proyecto en la carpeta Tools. Ahora, crear las variables de ambiente y agregarlas al PATH, por convención maven usa la variable M2_HOME.

export M2_HOME=~/Tools/maven
export PATH=$M2_HOME/bin:$PATH

Para asegurar que maven se encuentra bien instalado, ejecutar el siguiente comando:

mvn -version

En la consola se debe mostrar un mensaje similar al que se muestra a continuación:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T02:41:47+10:00)
Maven home: /Users/eddumelendez/Tools/maven
Java version: 1.8.0_101, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.6", arch: "x86_64", family: "mac"

A continuación, mostraremos como empezar creando proyectos a través de la línea de comandos. Para esto haremos uso de arquetipos, los cuales son plantillas ya definidas.

mvn archetype:generate

Dentro de los arquetipos más usados podemos listar:

  • org.codehaus.mojo.archetypes:pom-root:1.1

  • org.apache.maven.archetypes:maven-archetype-quickstart:1.1

Ambos arquetipos siguen el siguiente formato archetypeGroupId:archetypeArtifactId:archetypeVersion.

Por lo tanto, si se desea crear un proyecto tomando como base uno de los arquetipos antes mencionados se deben especificar las propiedades que se muestran en el siguiente comando:

mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.1 \
-DgroupId=me.eddumelendez.demo -DartifactId=maven-demo -Dversion=1.0.0-SNAPSHOT -Dpackage=me.eddumelendez.demo

El proyecto maven-demo es creado con la siguiente estructura:

.
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── me
    │           └── eddumelendez
    │               └── demo
    │                   └── App.java
    └── test
        └── java
            └── me
                └── eddumelendez
                    └── demo
                        └── AppTest.java

Donde:

  • src/main/java, ubica el código fuente de la aplicación.

  • src/test/java, ubica el código fuente de los tests.

Actualmente, IDEs como eclipse, intellij ó netbeans cuentan con un plugin para poder trabajar con proyectos maven.

Ciclo de vida

El ciclo de vida por defecto que ofrece maven es el siguiente:

  • validate

  • compile

  • test

  • package

  • verify

  • install

  • deploy

Para saber más sobre las opciones a través del terminal usando maven, leer Referencia de opciones de Maven CLI.


Eddú Meléndez

Java Software Engineer, Open Source Contributor