Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

Java: ¿Qué es Maven? ¿Qué es el archivo pom.xml?

Apache Maven es una potente herramienta de gestión de proyectos que se utiliza para gestión de dependencias, como herramienta de compilación e incluso como herramienta de documentación. Es de código abierto y gratuita.

Logotipo de Apache Maven

Aunque se puede utilizar con diversos lenguajes (C#, Ruby, Scala...) se usa principalmente en proyectos Java, donde es muy común ya que está escrita en este lenguaje. De hecho, frameworks Java como Spring y Spring Boot la utilizan por defecto, por lo que conviene conocerla si trabajas en la plataforma Java y, desde luego, con Spring.

Al contrario que otras herramientas anteriores y más limitadas como Apache Ant (también muy popular), Maven utiliza convenciones sobre dónde colocar ciertos archivos para el proceso de build de un proyecto, por lo que solo debemos establecer las excepciones y por lo tanto simplifica mucho el trabajo. Además, es una herramienta declarativa. Es decir, todo lo que definamos (dependencias en módulos y compontes externos, procesos, orden de compilación, plugins del propio Maven...) se almacena en un archivo XML que Maven lee a la hora de funcionar. Otras alternativas, como Gradle no utilizan archivos XML, sino de otro tipo, pero usan los mismos conceptos de Maven.

Con Maven se puede:

  • Gestionar las dependencias del proyecto, para descargar e instalar módulos, paquetes y herramientas que sean necesarios para el mismo.
  • Compilar el código fuente de la aplicación de manera automática.
  • Empaquetar el código en archivos .jar o .zip.
  • Instalar los paquetes en un repositorio (local, remoto o en el central de la empresa)
  • Generar documentación a partir del código fuente.
  • Gestionar las distintas fases del ciclo de vida de las build: validación, generación de código fuente, procesamiento, generación de recursos, compilación, ejecución de test ...

Además, la mayor parte de los entornos de desarrollo y editores de Java disponen de plugins específicos o soporte directo de Maven para facilitarnos el trabajo con esta, puesto que se ha convertido en una herramienta casi universal.

¿Qué es el archivo pom.xml?

La unidad básica de trabajo en Maven es el llamado Modelo de Objetos de Proyecto conocido simplemente como POM (de sus siglas en inglés: Project Object Model).

Se trata de un archivo XML llamado pom.xml que se encuentra por defecto en la raíz de los proyectos y que contiene toda la información del proyecto: su configuración, sus dependencias, etc...

El hecho de utilizar un archivo XML revela su edad. Maven se creó en 2002, cuando XML era lo más. Si se hubiese creado unos pocos años después seguramente tendríamos un pom.json y si hubiese sido más reciente un pom.yml. Modas que vienen y van. No obstante, el formato XML, aunque engorroso, es muy útil a la hora de definir con mucho detalle cómo debe ser cada propiedad y, también, para poder comprobarlas.

Incluso, aunque nuestro proyecto, que usa Maven, tenga un archivo pom.xml sin opciones propias, prácticamente vacío, estará usando el modelo de objetos para definir los valores por defecto del mismo. Por ejemplo, por defecto, el directorio donde está el código fuente es src/main/java, donde se compila el proyecto es target y donde ubicamos los test unitarios es en src/main/test, etc... Al pom.xml global, con los valores predeterminados se le llama Súper POM.

Esta sería la estructura habitual de un proyecto Java que utiliza Maven:

Estructura de carpetas del proyecto: cuelgan target, src con main y test, y el pom.xml

Este es el contenido de un archivo pom.xml sencillo de ejemplo:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>es.campusmvp</groupId>d>
  <artifactId>demo</artifactId>
  <version>1.0</version>
  <!-- Dependencias -->
  <dependencies>
    <dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
    <dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
		<exclusions>
			<exclusion>
				<groupId>org.junit.vintage</groupId>
				<artifactId>junit-vintage-engine</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>org.apache.tomcat.embed</groupId>
		<artifactId>tomcat-embed-jasper</artifactId>
		<scope>compile</scope>
	</dependency>
  </dependencies>
</project>

Como puedes ver incluye una serie de dependencias: la primera es el starter de Spring Boot para generar una aplicación Web, la segunda es el starter que trae todas las dependencias para poder ejecutar test (por ejemplo JUnit o Mockito) y que excluye todo lo relativo al motor antiguo de JUnit 4. La final añade el soporte para JSP en el servidor Apache Tomcat.

Los 4 primeros nodos son los únicos obligatorios y definen respectivamente el modelo de objetos que utilizará Maven, el identificador del grupo del proyecto, el id del proyecto (artifact) y su versión. Esto es lo mínimo que debe incluir el archivo si utilizamos Maven y la mayor parte de los editores y herramientas nos lo crearán automáticamente al crear el proyecto.

Herencia de POMs

Dentro de un proyecto pueden existir varios archivos pom.xml en distintas subcarpetas. Cuando una subcarpeta tiene su propio POM, este hereda los valores de las carpetas superiores, sobrescribiéndolos en caso de estar definidos de nuevo dentro de él.

De hecho el archivo pom.xml que tenemos en la raíz está actuando ya de esta manera: hereda todos los valores del Súper POM que son los que tenemos por defecto y, si en nuestro pom.xml propio en el proyecto establecemos otros diferentes, estos prevalecerán sobre los que hay en el Súper POM.

Este tipo de funcionamiento es típico en muchas herramientas de configuración y nos ofrece una manera muy potente de definir valores particulares para casos concretos teniendo una configuración global por defecto.

En resumen

En este artículo solo se pretendía explicarte de manera directa y concisa qué es Maven y qué son los archivos POM y cómo funcionan. En realidad Maven y su configuración son mucho más complejos ya que te permiten hacer agregación de configuraciones para reutilizar módulos entre proyectos padres e hijos, interpolar POMs para usar unas configuraciones dentro de otras, definir y usar variables y algunas cuestiones avanzadas más. En los anteriores enlaces encontrarás más detalles sobre todo esto.

Espero que te haya servido para orientarte si estas empezando y si quieres aprender Spring Boot, tenemos un excelente curso 😉

José M. Alarcón Aguín Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José M. Alarcón Aguín
Archivado en: Lenguajes y plataformas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (1) -

donde descargo el instalador para windows digame

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.