Comenzando con Maven

En el mundo del desarrollo Java, desde mi opinión, una herramienta revolucionó la creación y gestión de proyectos en este lenguaje. Esta es como no, maven, una herramienta que es mucho más que un gestor de dependencias dentro de nuestro proyecto. Apache Maven o comúnmente conocido como “Maven” es una herramienta esencial para los programadores en Java. Éste nos ayudará a construir nuestro proyecto, manejar dependencias, generar documentación y muchísimas cosas más. Nosotros podemos ver su capacidad para solventar problemas, conociendo como era el trabajo de los desarrolladores java pre-maven, “por definirlos de alguna forma”.

Fuente: Apache Maven

Cuando nosotros necesitamos añadir una librería a nuestro proyecto, lo que se realizaba era acudir a internet y descargar la dependencia en cuestión, pero esto no es una buena práctica.

El motivo lo veremos con un simple ejemplo. Construyendo un proyecto que requiera Spring, esta dependencia también necesitará la librería log4j, que es lo que se conoce como una dependencia transitiva, en nuestro proyecto.

Esta no viene con Spring, y debemos de conocer la versión o conjunto de ellas compatible con la librería de Spring que estemos incluyendo en nuestro proyecto. Al iniciar una aplicación sin dicha dependencia, log4j, sólo se nos mostrará numerosos errores en los logs de la aplicación, la razón es porque no se encuentra la librería o porque su versión no es compatible con la de Spring.

Este es un pequeño ejemplo, puede mostrar como la gestión manual de dependencias, puede ocasionar numerosas pesadillas durante nuestro desarrollo o despliegue de aplicaciones.

Fuente: freepng

Maven no sólo solventa este dolor de cabeza para los desarrolladores, también realiza la descarga automática de librerías y su gestión, y crea lo que se conoce como un repositorio maven. Durante el desarrollo, cada desarrollador poseerá un repositorio maven local (dentro de su equipo) con las dependencias que requiere sus proyectos y las que vaya construyendo durante sus desarrollos.

Maven es mucho más que esto, no es sólo un gestor de librerías y sus descargas. Utiliza una convención para el desarrollo de software que veremos en los siguientes puntos. Todas estas cualidades, han hecho que Java adopte gustosamente a Maven como herramienta que ayuda en su desarrollo.

¨La mayor parte de los proyectos open-source, son proyectos maven, lo que promueve que se comparta código entre los desarrolladores.¨

1.- Instalación

Antes de comenzar la descripción de la instalación de maven en los diferentes sistemas operativos, se da por supuesto que tienes instalado openjdk en tu sistema operativo, y la variable de entorno JAVA_HOME creada de forma adecuada.

Existen distintos mecanismos de instalación de maven. La más simple consiste en realizar la descarga de la distribución de maven oficial.

En el momento de la creación de este documento la versión que se encuentra es la 3.6.3. Hemos de tener en cuenta, que presenta un único requerimiento y es la versión de java con la que se podrá ejecutar (1.7 o superior).

Una vez realizada la descarga y ubicado el la carpeta descomprimida en la ruta que estimemos adecuada, generalmente donde se localiza el resto de software de nuestro equipo, sólo hemos de declarar la variable de entorno MAVEN_HOME, e incluirla en el PATH del sistema. Los pasos simplificados de instalación en los distintos sistemas operativos, se pueden consultar aquí.


Realizada la descarga, instalación y configuración de las variables de entorno podemos comprobar el correcto funcionamiento a través del comando “mvn -version”.

2.- Configuración

Antes de comenzar a utilizar maven de forma habitual, hemos de realizar una configuración adicional, dado que este repercute donde se almacenan los librerías, y los repositorios a los cuales se conecta nuestro equipo. Para realizar la configuración hemos de dirigirnos a la instalación de maven, y localizar el fichero settings.xml en la carpeta conf. Podemos realizar la configuración de acceso al repositorio de nuestra empresa, equipo de trabajo, … Por último si es importante realizar la configuración de nuestro repositorio local, (lugar donde se almacenan las librerías que se descargan y que creamos).

3.- Evolución

Maven nace en 2002 como necesidad para el desarrollo software, descrito en la instrucción de este documento. Con el paso de los años, y entre otros motivos, su carácter open-source, ha tenido un crecimiento esponencial. Como ejemplo de ello veamos el incremento de artefactos (librerías) es un repositorio principal.

Fuente: Wikipedia (The number of artifacts on Maven’s central repository has grown rapidly)

Indicar por último que maven se convirtió en sustituto de Ant, como herramienta para la construcción de artefactos (librerías).

4.- Unos minutos con Maven

Ejecutados los pasos anteriores, podremos comenzar a conocer la herramienta. Comenzaremos creando nuestro primer proyecto de forma manual. Para ello seguiremos el siguiente manual, y describiremos los comandos utilizados y los ficheros creados y su contenido.

Creación de un proyecto

Para la creación hemos de ejecutar el siguiente comando, desde una terminal (windows / linux / mac).

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Una vez ejecutada, y tras unos segundos de la descarga de las librerías necesarias por primera vez, obtendremos la siguiente estructura.

my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

Para comprender de una forma correcta la función de cada una de las carpetas y ficheros creados de forma automática, podemos consultar la documentación oficial.Inicialmente haré hincapié sólo en los siguientes directorios o ficheros:

  • src/main/java: Código fuente de nuestra aplicación.
  • src/main/resources: Ficheros de configuración de nuestra aplicación.
  • src/test/java: Código fuente de nuestros test.
  • src/test/resources: Ficheros para la ejecución de nuestros test.

Existen otros que se crearán en función del tipo de proyecto que vayamos a construir, o los comandos que ejecutemos a través de maven (javadoc, …).

Ciclo de Vida

El ciclo de vida de maven se puede resumir a través de la siguiente imagen:

Fuente: Libro Maven Lifecycle

Para la ejecución de los distintos comandos que supondrán la ejecución hasta la fase que deseemos realizar, hemos de situarnos en el directorio donde se encuentre el fichero pom.xml.

Comandos más destacados:

  • mvn clean.- Realiza una limpieza de las clases generadas hasta el momento.
  • mvn compile.- Compila nuestro proyecto.
  • mvn package.- Genera el empaquetado del proyecto, generalmente un jar si no se especifica otro tipo.
  • mvn install.- LLeva el empaquetado (jar) a nuestro repositorio local. Queda “visible” para otros proyectos maven en nuestro ordenador.
  • mvn deploy.- Lleva el empaquetado (jar) a nuestro servidor de librerías. Queda “visible” para otros proyectos maven en otros ordenadores. Este comando necesita que a maven se le haya indicado dónde está dicho servidor.
  • mvn javadoc:javadoc.- Genera la documentación javadoc de nuestro proyecto.
  • mvn site.- Genera documentación html del proyecto. Por supuesto, necesitamos haber escrito en determinados ficheros el contenido de esa documentación.

Además maven proporciona comandos para adaptarse a los ide´s como:

  • mvn eclipse:eclipse.
  • mvn idea:idea.

Por último, el conjunto de comandos, para las distintas fases del ciclo de vida de maven, en el siguiente link.

4.- Unos minutos con Maven

Ejecutados los pasos anteriores, podremos comenzar a conocer la herramienta. Comenzaremos creando nuestro primer proyecto de forma manual. Para ello seguiremos el siguiente manual, y describiremos los comandos utilizados y los ficheros creados y su contenido.

Creación de un proyecto

Para la creación hemos de ejecutar el siguiente comando, desde una terminal (windows / linux / mac).

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Una vez ejecutada, y tras unos segundos de la descarga de las librerías necesarias por primera vez, obtendremos la siguiente estructura.

my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

Plugins

Los plugins en maven, los podría definir como herramientas que nos permiten realizar distintas funcionalidades, es decir, nos permiten: compilar, empaquetar, copiar librerías, desplegar en servidores embebidos, y mil y una cosas más.

Es por ello que los plugins esconden uno de los grandes poderes en maven. Voy a describir algunos de ellos que me parecen sumamente interesantes:

  • maven-compiler-plugin.- Es el plugin utilizado para compilar el código fuente del proyecto. En él, entre otras cosas podemos configurar la versión de JDK con la que compilamos el proyecto.
  • maven-jar-plugin.- Es el plugin que provee la capacidad de construir Jars. Entre sus características a destacar, podemos configurar el fichero Manifiest que genera el proyecto.
  • maven-dependency-plugin.- Es el plugin encargado de realizar la manipulación en las jar generados.
  • maven-jetty-plugin.- El plugin de jetty es muy utilizado para un rápido desarrollo y pruebas durante el desarrollo de aplicaciones web que requieren un contenedor web. Es posible iniciar el contenedor de jetty utilizando un goal de maven mvn jetty:run, o recargar la aplicación sin necesidad de reiniciar el contenedor.

Archivo POM

LMaven permite trabajar de forma independiente del IDEs con su propio modelo de proyecto, que se guarda en el archivo pom.xml (de Project Object Model).

Identificación del Proyecto

En el archivo pom se declaran, entre otras cosas, un identificador único de nuestro proyecto/artefacto, que resulta de la unión de tres identificadores:

  • groupId: representa la organización autora/dueña del artefacto.
  • artifactId: este campo define el nombre por el que se conoce al proyecto en sí mismo.
  • versión: es el último componente del nombre, y debe de seguir el patrón X.X.X.

Un ejemplo de un fichero pom, lo podemos ver en el siguiente enlace.

Dependencias

Las dependencias se definen dentro de un tag :

<project ...>
<...>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
</dependencies>

Parent Proyect

En maven podemos hacer referencia a otro proyecto, fichero pom.xml a través de la etiqueta <parent>. Este tipo de ficheros se suelen utilizar para definir el conjunto de librerías o versiones comunes a todas las librerías que forman nuestro proyecto.

<parent>
<artifactId>comenzando-con-maven</artifactId>
<groupId>es.nuestra.organizacion</groupId>
<version>1.0-SNAPSHOT</version>
</parent>

Algunos ejemplos de proyectos maven en el siguiente enlace.

error: El contenido de esta web se encuentra protegido, no te pido dinero, pero tampoco que copies.