Por qué Maven

Maven es la última pieza que he decidido acoplar en mi entorno de desarrollo o ecosistema software. Para los que no lo conozcais, Maven es una herramienta para gestionar el ciclo de vida de un proyecto Java. Desde mi primer trabajo hasta ahora he estado usando Ant para esta tarea con excelentes resultados.

Entonces por qué cambiar

Soy un apasionado de la parte de construcción de proyectos, lo que en inglés llaman Build Engineering. Llevo ya muchos proyectos, de desarrollo y mantenimiento, de todos los sabores y algún sinsabor también, hasta proyectos con un único servidor de desarrollo compartido y proyectos cero automatizados. Así que he comprobado y sufrido la importancia del sistema de construcción de un proyecto. Hasta que punto es capaz de multiplicar la productividad del equipo, aumentando la velocidad y eficacia de ejecución de los procesos del ciclo de vida.
En mi opinión más importante que usar tal framework o tal otro. Aún más valioso si queremos realizar testing e integración continua. Y en definitiva el camino para convertir nuestra profesión en una verdadera ingeniería.

Por eso, en mi opinión usar Maven, sobre otras alternativas, aporta las siguientes ventajas.

Estandariza la estructura de directorios

Hasta ahora cada proyecto ha tenido una estructura arbitraria, basada en el criterio del lider técnico, en la estructura de generación del IDE corporativo o simplemente copiada de otro proyecto. Así es común encontrarse con que en cada proyecto un mismo tipo de fichero se encuentra en carpetas diferentes sin ninguna razón especial, dificultando el día a día de los que trabajan con varios proyectos de forma paralela.

Maven propone una misma estructura para todos los proyectos, pero permitiendo que pueda configurarse de forma personalizada en caso necesario (convención sobre configuración).

Estandariza el ciclo de vida

Si la estructura de directorio de cada proyecto es un mundo, del ciclo de vida ni hablamos. Cada proyecto tiene sus propias fases, con su nombre, orden y requisitos que hay que aprenderse...

Maven aporta una implementación de ciclo de vida. Sin tener que programar nada. De modo que ejecutar cualquier fase del ciclo de vida es siempre igual en todos los proyectos Maven. Para el desarrollador común aprender a manejar un proyecto Maven implica haber aprendido a manejar todos los proyectos Maven.

Además este ciclo de vida es extensible, permitiendo, en caso necesario, añadir tareas personalizadas implementadas en Java o Ant, entre otros lenguajes.

Reutilización

El año pasado implantamos Hudson como servidor de integración continua. Además de las tareas de test y construcción lo usamos para sacar informes de calidad de código y cobertura. Todo mediante scripts Ant. Pero nuestros proyectos son muchos, muy hetereogeneos y ninguno usaba checkstyle, findbugs, ni cobertura, así que no fue nada inmediato configurarlos para Hudson, no es que nos llevara horas, pero si un rato por proyecto al tener que añadir librerias y modificar el script Ant.

Mientras que con Maven si habría sido inmediato gracias a su sistema de reutilización, tanto de uso de plugins como de herencia de configuración. Fue el momento que empecé a pensar en serio en usar Maven, hasta entonces no me salian las cuentas ventajas/coste.

Integración

La integración de Maven con las herramientas y frameworks que usamos en la actualidad es total. Además de las citadas anteriormente están Eclipse, Selenium, CVS, SVN, Hibernate y Axis2.

Gestión de dependencias

Uno de los problemas más complejos a la hora de configurar un proyecto es la gestión de dependencias. Hasta ahora yo siempre he optado por incluir todas las dependencias en la propia estructura del proyecto y por tanto en el scm. A pesar de la posible redundancia y malgasto de espacio por tener muchas dependencias repetidas entre todos los proyectos.

Maven aporta un sistema de gestión de dependencias basado en repositorios y una fuerte configuración en el proyecto.


También destacar que Maven está basado en la experiencia, criterio y buenas practicas de la gente de Apache. Como puede apreciarse en las características que trae de serie, como filtering, perfiles, arquetipos, sistema multi-módulo y construcción del sitio web del proyecto. Y esto es todo, ya iré contando como me va...

9 comentarios :: Por qué Maven

  1. Hola Julio:

    Muy buena presentación.

    Un saludo

  2. Hola Julio Cesar, en una de las lineas de tu post pones lo siguiente: "El año pasado implantamos Hudon como servidor de integración continua." deberias hacer una corrección en vez de Hudon deberia ser Hudson y tambien poner un enlace a la página de servidor. Bueno regresando al post esta muy bueno das una muy buena relacion entre la herramienta y los estandares. Saludos.

    Jose Luis Manrique

  3. Errata corregida.

    Un saludo y muchas gracias a los dos por participar.

  4. alejate de maven todo lo que puedas :). Seguramente pasarás este comentario por encima, pero dentro de unos meses, cuando lo hayas implantado te acordarás de él.

    Suerte en cualquier caso.

  5. Gracias Javi por preocuparte por mi salud :-)

    En principio no tengo pensado cambiar Ant en los proyectos donde ya está funcionando. Vamos a probar Maven en un par de proyectos nuevos que deberiamos empezar en breve.

    Y tu comentario sí que sirve, aunque no des ningun detalle, pero para darme ánimos cuando las cosas no salgan a la primera, igual que otras criticas que he leido.

    Como ya he comentado, las cuentas beneficios/coste a priori me salen, al menos para arriesgarme a probarlo en un par de proyectos serios. Está maduro y casos de éxito sobran, aunque también haya alguna historia de miedo por ahí... pero en qué tecnología no la hay!

  6. Hola Julio,

    Me ha parecido muy interesante tu exposición sobre Maven.

  7. en primer lugar soy un novato en esto de java y tengo una dudilla, como se integra esto con eclipse??

    gracias

  8. Excelente

  9. Buena explicación de Maven, Gracias.

Publicar un comentario