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...
Hola Julio:
Muy buena presentación.
Un saludo
Anónimo
22 de marzo de 2009, 16:45Hola 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
Anónimo
22 de marzo de 2009, 20:48Errata corregida.
Un saludo y muchas gracias a los dos por participar.
jcesarperez
22 de marzo de 2009, 20:58alejate 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.
Javi Santana
22 de marzo de 2009, 23:19Gracias 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!
jcesarperez
23 de marzo de 2009, 13:44Hola Julio,
Me ha parecido muy interesante tu exposición sobre Maven.
Alejandro R. Caraballo Maestre
11 de abril de 2009, 18:03en primer lugar soy un novato en esto de java y tengo una dudilla, como se integra esto con eclipse??
gracias
Anónimo
21 de febrero de 2011, 21:48Excelente
Anónimo
26 de junio de 2012, 22:06Buena explicación de Maven, Gracias.
Unknown
3 de febrero de 2014, 19:27