Presentando Maven. Explicación básica.
4 diciembre 2008 at 8:52 pm 5 comentarios
Voy a presentar una herramienta libre muy utilizada en el mundo Java: Maven. Pretendo hacer una pequeña introducción para resaltar ideas.
Básicamente Maven es una herramienta de generación y gestión de proyectos Java. Uno de sus puntos fuertes es la gestión de dependencias, y es una de las cosas que hicieron que se adoptase en muchos proyectos en lugar de Ant.
Maven promueve una estructura de proyecto determinada, ya que se basa en el principio «convención sobre configuración», es decir, que si hacemos las cosas de una forma determinada nos ahorramos configurar esas cosas. Sin duda seguir esa estructura nos facilitará las cosas.
A pesar de la creencia popular de que Maven es una especie de Ant, o un Ant ampliado, la verdad es que se parecen en poco. Ente esas similitudes destaca el detalle de que la descripción del proyecto está en un xml, que en Maven se llama pom.xml (frente al build.xml de Ant).
Otro concepto importante dentro de Maven es el de repositorios. Un repositorio es un almacén de paquetes (archivos jar habitualmente) ordenados de forma inequívoca incluyendo la versión. Maven se descarga a un repositorio local (bajo .m2 en el directorio del usuario) todas las dependencias y plugins que va necesitando. Esta descarga hace que las primeras ejecuciones puede ser bastante largas.
Pero para hacernos una primera idea de cómo funciona Maven, vamos a ver cómo sería un archivo pom.xml típico.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.tcymu.maven</groupId> <artifactId>test1</artifactId> <name>test1</name> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> </dependency> </dependencies> </project>
Las partes importantes sería la definición de groupId
que cumple una función similar a la de un paquete Java. artifactId
sería el nombre de este artefacto (jar) en el repositorio. Como es de suponer version
define la versión del artefacto. Y bajo dependencies
aparecen las dependencias, que como se puede ver constan precisamente de un groupId
, un artifactId
y una version
.
Con esto y si hemos seguido la estructura de paquetes que sugiere Maven, compilaríamos el proyecto (incluyendo la descarga de dependencias) con una simple línea:
mvn compile
Con compile le estamos indicando una fase. Algunas de las otras fases disponibles en Maven son: clean
(limpia todo lo que ha generado), package
(genera un jar), install
(instala el jar en el repositorio local) o deploy
(instala el jar en un repositorio remoto).
Hay que señalar que al ejecutar una fase se ejecutan todas las anteriores (para hacer un package
primero hace un compile
). Además ejecutar una fase significa realmente ejecutar una serie de tareas (goals) de una serie de plugins determinados.
¿Y qué es un plugin en Maven?. Pues prácticamente todo. Todas las tareas que ejecuta Maven son plugins. Así por ejemplo el compilar es llamar a la tarea compile del plugin compiler
. Se puede llamar a una tarea de un plugin directamente mediante:
mvn compiler:compile
(notación plugin:goal)
Existe una gran cantidad de plugins para Maven. Muchos de ellos con multitud de tareas.
Con esta introducción he intentado aclarar un poco los conceptos sobre Maven. Que realmente en un principio pueden ser algo confusos. Como en otras entradas utilizaré Maven, seguro que se irán aclarando más vuestras dudas.
5 comentarios Add your own
Deja una respuesta
Trackback this post | Subscribe to the comments via RSS Feed
1. Repositorios Maven: Nexus « Tus ceros y mis unos | 20 enero 2009 a las 8:13 pm
[…] Enero 2009 Como dijimos en nuestra pequeña introducción a Maven, el lugar donde se va a almacenar nuestro software son los llamados […]
2.
Manuel Gaytán | 8 febrero 2010 a las 5:12 pm
Gracias, muy bueno para tener un punto de partida.
3.
Fer | 7 agosto 2012 a las 9:10 am
Buena intro! Estoy trabajando con maven y para familiarizarte con el tema es muy clave!!
4.
Neskinho Bordello | 21 noviembre 2013 a las 10:53 am
En una asignatura (Ingeniería del Software 2), en varias horas de clase, no fueron capaces de explicarlo y exponerlo tan bien como tu, mis felicitaciones.
5. Maven and continous integration | Machine Learning, Maths and Physics | 28 marzo 2014 a las 4:21 pm
[…] https://mikiorbe.wordpress.com/2008/12/04/presentando-maven-explicacion-basica/ […]