Guía básica de Maven

Aunque el protagonista del curso es Spring, Spring recibe la estructura de proyectos de Maven, por lo que para situarnos es necesario hacer un pitstop y conocer Maven, antes de continuar.

¿Qué es Maven?

La era Pre-Maven, antes de Maven…

Cuando desarrollamos un proyecto sin Maven, nos empiezan a surgir muchas preguntas. Tales como:

  • ¿Cómo me instalo el proyecto?
  • ¿Por qué cada proyecto tiene una estructura distinta?
  • ¿Cómo modificamos alguna versión de una librería?
  • ¿Cómo metemos una nueva librería?
  • ¿Cómo lo probamos?

Las respuestas a estas preguntas eran complejas y diferentes para cada proyecto.

La era Post-Maven, con de Maven…

La finalizad principal con la que Jason van Zyl desarrolló Maven para la empresa Sonatype (año 2002), fue con la finalizad de aglutinar todas esas preguntas creando una manera de gestionar y construir proyecto que otorgará un conjunto de convenciones para que las preguntas anteriores y algunas más tuvieran una misma respuesta. Y también otorgar simplicidad a la creación y gestión de proyectos.

Estructura de un proyecto Maven

Apache Maven es un software que nos permite gestionar proyectos. Al crear un proyecto de Maven, automáticamente se nos generará una estructura de carpetas muy concreta que ya viene predefinida. Como la de la siguiente imagen:

Cada uno de los directorios, tiene una funcionalidad dentro del proyecto.

  • src/main/java: contiene el código fuente. Aquí escribiremos (o estarán si el proyecto es cargado) las clases con extensión .java. El contenido de este directorio se conoce bajo el nombre de modulo.
  • src/main/resources: contiene los recursos estáticos (XML, propiedades, imágenes…) que necesita nuestro modulo para funcionar correctamente.
  • src/test/java: contiene los ficheros de pruebas (testing) para verificar el correcto funcionamiento del modulo.
  • src/test/resources: almacena los archivos que genera maven al usar los comandos (compile, package…).
  • pom.xml: el Project Object Model (POM) es el encargado de gestionar y construir los proyectos, contiene el listado de dependencias que son necesarias para que el proyecto funcioné, plugins, etc. Toda la información del proyecto está basada en este fichero. Tiene extensión .xml y desde la propia web oficial de Apache Maven, lo definen como el núcleo central, por lo que podemos afirmar que es el corazón del proyecto.
  • superpom.xml: Todo proyecto de maven hereda del “superpom” que es un pom.xml padre, donde se define el build por defecto, para que todos los proyectos usen toda la estructura.

Project Object Model (POM)

El corazón del proyecto, requiere un apartado independiente por la importancia y por la cantidad de conceptos que existen dentro de el y que tenemos que dominar: estructura mínima, presentar el concepto de dependencias, etc.

Estructura mínima de un fichero Pom

El fichero pom con la estructura más básica posible, contendrá:

En cuanto al ejemplo anterior, su nombre de artefacto completo es “com.mycompany.app:my-app:1”

  • Project: root.
  • ModelVersion: se debe establecer en 4.0.0
  • GroupId: el id del grupo del proyecto.
  • ArtifactId: el id del artefacto (proyecto).
  • Version: la versión del artefacto en el grupo especificado.

Dependencias en Maven

Las dependencias, son componentes que nuestro software necesitará para su correcta ejecución durante algún ciclo de vida. Si descargamos un proyecto y lo implementamos en nuestro sistema. Maven, obtendrá las dependencias del proyecto que son necesarias o bien desde el repositorio local, o bien desde un repositorio remoto.

Para declarar dependencias a la hora de crear un proyecto de Spring, tenemos dos opciones:

  • Declararlas cuando creamos el proyecto, no tendremos que añadirlas manualmente, si no que se añadirán automáticamente (lo veremos en próximos artículos).
  • Declararlas manualmente visitando el maven central repository (link a la maven central repository).

En el caso que las añadamos de una manera o de otra las dependencias, el resultado final será el mismo, un fichero pom.xml. Que deberá contener un elemento root llamado <dependencies></dependencies> que contendrá dependencias <dependency></dependency> en su interior.

Si por ejemplo quisiéramos añadir una dependencia y ya tenemos el proyecto creado (o las queremos añadir manualmente), vamos al mvnrepository, copiamos la dependencia y la añadimos dentro de nuestro elemento root dependencies.

Antes de llegar a poder copiar la dependencia, tenemos que seleccionar la versión de Spring Boot Web Starter que queremos bajar. En esta página, además aparecen las usages (veces que se ha utilizado dicha versión).

En nuestro caso, seleccionamos la 2.1.6 RELEASE y ya podemos copiar la dependencia y creando un root padre llamado dependencies, pegarla dentro.

Elementos de una dependencia Maven

Las dependencias en Maven suelen tener:

  • dependency: elemento contenedor padre que especifica que es una dependencia.
  • groudId: puede no ser obligatorio dependiendo del caso aunque si se pone no pasa nada.
  • artifactId: Es obligatorio definir el artifactId de una dependencia.
  • version: Si no lo especificamos Maven cogerá la última versión o la que especifiquemos en el pom padre (superpom.xml). Si lo especificamos no está demás pero sino se especifica no pasa nada, siempre que esta dependencia no entre en conflicto con otras.

Entendiendo el proceso de busqueda de dependencias de Maven

A partir de la versión 2 de Maven (nosotros trabajamos con la 3.6.1), las dependencias no van acompañadas del código fuente de nuestro desarrollo sino en una carpeta local llamada m2. A la hora de buscar las dependencias de un proyecto, Maven, va al pom y comprueba primeramente si existen en el repositorio m2 (repositorio remoto). En caso de que allí no existan, irá al maven central repository (repositorio central) y las descargará en nuestro repositorio remoto (m2) para que se pueda utilizar en todos los repositorios locales (proyectos).

Para la próxima compilación, ya dispondrá de dicha dependencies dentro del depositorio remoto. Y por tanto, si cargamos un proyecto, este mirará en su repositorio local, no encontrará las dependencies e irá al repositorio remoto donde sí que las encontrará. De modo que, no será necesario descargarla otra vez del Maven Central Repository. Ya que esa dependencia la podemos satisfacer sin necesidad de contarnos a internet.

Ubicación del Maven repository remote m2

El repositorio m2 (remote repositorio) por defecto está ubicado por defecto en directorio: ${user.home}/.m2/repository 

  • Unix/Mac OS X – ~/.m2/repository
  • Windows – C:\Users\{your-username}\.m2\repository

Aunque la ruta varía dependiendo del sistema operativo que se utilice:

Otra manera de ver es utilizar el comando:

mvn help:evaluate -Dexpression=settings.localRepository

Realmente estás dependencias Maven, no son nada más que archivos con extensión .jar, como con los que hemos trabajado anteriormente en el apartado de JDBC y MySQL.

Bueno esto es todo por hoy, aunque Maven es un mundo y se pueden llegar a las profundidades, no es el objetivo de este artículo. Pero seguro que a estar alturas, tenéis una visión y unos conocimientos básicos de lo que hace Maven. Ya que es totalmente necesario conocer estos conceptos y entenderlos para poder realizar proyectos de Spring desde 0. Ya que si no entendemos todo esto, posiblemente intentemos trabajar con dependencias que no tenemos cargadas en nuestro fichero pom.xml y por lo consiguiente, esto provocará errores a la hora de arrancar el proyecto de Spring.

3 comentarios

  1. I visit everyday a few websites and blogs to read content, except this web site presents feature
    based articles.

  2. This is a topic which is near to my heart… Cheers! Where are your
    contact details though?

  3. Spot on with this write-up, I honestly feel this site
    needs much more attention. I’ll probably be returning to
    read more, thanks for the information! cheap flights http://1704milesapart.tumblr.com/ cheap flights

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

La Ley 34/2002 nos obliga a avisarte de que usamos cookies propias y de terceros con objetivos estadísticos y de sesión y para mostrarte la 'publi' que nos da de comer. Tranquilo, este mensaje solo sale una vez. Más información

Java desde 0 comunica a los usuarios, a través de este aviso, que puede utilizar cookies cuando el usuario navega por las diferentes pantallas y páginas del sitio. Durante el uso de nuestra página Web usted acepta y autoriza expresamente el uso de cookies, de acuerdo con nuestra Política de Privacidad. Este sitio web utiliza las siguientes cookies propias: - Cookies de sesión, para garantizar que los usuarios que escriban comentarios en el blog sean humanos y no aplicaciones automatizadas. De esta forma se combate el spam. Este sitio web utiliza las siguientes cookies de terceros: - Google AdManager y AdSense: Utiliza cookies para mejorar la publicidad. Entre otros fines, suelen utilizarse para segmentarla según el contenido que sea relevante para los usuarios o su ubicación, mejorar los informes de rendimiento de las campañas y evitar mostrar anuncios que los usuarios ya hayan visto. Las cookies no contienen información personal identificable. Consulta cómo utiliza Google la información de sitios web o aplicaciones. y cómo bloquear determinados anuncios. - Google Analytics: Almacena cookies para poder elaborar estadísticas sobre el tráfico y volumen de visitas de esta web. Al utilizar este sitio web está consintiendo el tratamiento de información acerca de usted por Google. Por tanto, el ejercicio de cualquier derecho en este sentido deberá hacerlo comunicando directamente con Google. - Redes sociales: Cada red social utiliza sus propias cookies para que usted pueda pinchar en botones del tipo Me gusta o Compartir.

Cerrar