viernes, octubre 07, 2005

Maven izando el mundo


Llevo ya unos meses usando Maven, esta magnífica herramienta para el control de proyectos. La definición exacta de este software es, según sus creadores:
"a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information".
Que traducido es "software para la administración de proyectos y herramienta de asimilación, se basa en el concepto de objeto de modelo de proyecto, pudiendo administrar la construcción, el reporte y la documentación del mismo desde una pieza central de información".
Yo la verdad, es que cuando leí esta definición me quedé a cuadros, realmente no tenía ni idea de lo que significaba. Sabía que tenía que dedicarle un poco de tiempo, estos chicos de la Apache Software Foundation siempre me sorprenden con sus productos y tenía el presentimiento de que este no sería un caso aparte. Después de haber estado un tiempo usándolo, me puedo atrever a explicar un poco en qué consiste Maven.
Maven es una aplicación que está una capa por encima de Ant. De hecho, Maven hace uso de Ant para poder realizar muchas de sus tareas. Los de la ASF vieron que cada vez que quieres construir un proyecto java con Ant tienes que estar repitiendo el archivo de construcción (build.xml), en muchos casos dicho archivo no varia de un proyecto a otro, así que decidieron hacer una herramienta que nos ahorrase ese trabajo extra del cual uno se aburre a la tercera vez que lo hace (es cierto que las dos primeras son emocionantes por la sensación de poder que da Ant).
Una de las cosas que diferencian a Maven de Ant es que las cosas están bastante más definidas cuando te pones a usar Maven. Por ejemplo, Maven tiene predeterminadas plantillas que te permiten construir un proyecto en pocos minutos. Estas plantillas son archivos en jelly (una herramienta para convertir xml en código ejecutable) que hacen la vida más fácil a los programadores. En Ant se tenía toda la libertad del mundo para tener la disposición de directorios que se quisiese y, aunque parezca contradictorio, a veces la libertad en los desarrollos puede llevar al caos en un equipo grande. Los chicos que han diseñado esta herramienta se han dado cuenta de que después de unos cuantos años de desarrollos en java, que para determinado tipo de proyectos hay determinadas tipos de estructuras que son las más optimas (comodas o como se quiera llamarlas).
Si Ant tiene tareas (tasks) como unidades de trabajo, Maven tiene fines (goals). El concepto es muy parecido aunque la manera de llevarlo a cabo es distinto. Los que nos hemos tenido que crear nuestros build.xml sabemos que las tareas de ant las define el escritor del archivo, con Maven no se pierde esa potencia pero se ahorra mucho trabajo porque Maven ya viene con un montón de goals predefinidos, sin necesidad de que la persona encargada de la construcción y ensamblaje de la aplicación tenga que escribir una sola línea. Esto se debe a que, igual que ocurre con la estructuras, hay muchas tareas comunes que se pueden simplificar.
Pero Maven no solo sirve para compilar y empaquetar. También puedes hacer que los test de junit corran en el proceso de construcción, haciendo más fácil la vida de los seguidores de la programación extrema, y en concreto, de los desarrolladores inmersos en la integración contínua.
Se puede usar para realizar documentación del proyecto (javadocs) así como reportes que conciernen al desarrollo del proyecto, desde datos relacionados con los desarrolladores involucrados (gracias a la conexión con alguno de los controles de versiones más populares) hasta datos acerca de la calidad del código por medio de herramientas como pmd. Y, todo ello, se puede ver traducido a una web en la que se encuentran todos los recursos, datos, documentos del proyecto.
Parece ser que Maven es la herramienta que se impondrá en el desarrollo de proyectos java. Y quizás no solo java, después de haber visto como mocosoft vuelve a plagiar a la comunidad de software libre/abierto creando su mAnt, me atrevo a decir que ya están tardando en copiarlo para su paupérrima plataforma "net".
Sé que me he dejado cosas en el tintero pero realmente creo también que hay mejores sitios para aprender las profundidades de un proyecto tan interesante como es Maven.

10 comentarios:

Anónimo dijo...

Realmente interesante este articulo de Maven, esperamos ansiosos muchos mas, y que el nivel no decaiga.

PD:Podria su señoria postear uno hablando de las maravillas de XDoclet?? GNU BIATCHS LEET!!!!


da_Munkah

eTux dijo...

Tomo nota, e intentaré tener listo un artículo de xdoclet en cuanto tenga un ratillo libre para escribirlo. No hace falta decir que la conexión de Maven con Xdoclet hacen de la configuración las aplicaciones un juego de niños!

Anónimo dijo...

Hola Etux,

¿nos podrías recomendar a los visitantes algún libro para poder entender bien la filosofía de Maven y su utilización?

Gracias

eTux dijo...

Desgraciadamente no hay demasiados libros a la venta que hablen de Maven. He visto uno que podrás encontrar en amazon que se llama "Maven: a developer's handbook" que es de la serie famosa de oreilly. Ese es el único que hay enfocado plenamente a Maven.
Yo descubrí maven gracias a un libro de wrox de hibernate, y la verdad es que se empiezan a ver a libros que hablan de él pero todavía no hay ninguno, que yo sepa, que se meta suficientemente dentro de las entrañas de maven. También hay otro que se llama "Professional Java Tools for Extreme Programming: Ant, XDoclet, JUnit, Cactus, and Maven (Programmer to Programmer)" aunque no he tenido tiempo de echarle un vistazo...

Anónimo dijo...

Etux, amiguete

Yo conocí al tal Maven ese gracias a ti... y tenías razón, hace que la vida sea un poco más fácil...

Ese tal Hibernate del que tanto me has hablado... es tan buen chaval como el Maven? A ver cuando me lo presentas! ;D

Salu2

Víctor dijo...

Muy interesante el Maven, lo propondré en mi trabajo porque van a iniciar un proyecto J2EE.

Aunque dudo que lo implanten... no son demasiado aficionados a la planificación, pero lo intentaré.


Felicides por el blog y a seguir nutriendo la blogosfera.

Nos leemos en la blogosfera Master!

Anónimo dijo...

Caro Etux:
Me gustó mucho el artículo de Struts. Sucede que aunque existen muchos tutoriales(en español) y libros(en inglés)al respecto, tú has definido lo mas significativo en pocas palabras fáciles de comprender. Ojalá te dé ganas de escribir un tutorial mas extenso. Gracias.

Anónimo dijo...

Para el desarrollo de mis aplicaciones utilizo Netbeans y me preguntaba que relación existe entre Maven y Netbeans, es decir cuando creo una aplicación utilizando Netbeans, este crea la estructura del proyecto con los sus archivos de configuración principales, ¿ existe alguna forma de integrar Netbeans y Maven o son dos cosas totalmente distintas ?

eTux dijo...

Sí que se puede usar maven con netbeans gracias a un plugin. Yo estoy usando eclipse y también tengo el plugin para el mismo.
Para más información de como usar maven con netbeans, te recomiendo el siguiente enlace:
http://confluence.slac.stanford.edu/display/ilc/Installing+Maven+with+Netbeans+Support

eTux dijo...

Hola xj128s,
Mi idea es empezar haciendo introducciones a las tecnologías y después ir haciendo pequeños ejemplos para que la gente vaya viendo como se usan las tecnologias. En cuanto tenga un ejemplo con struts, lo publicaré. Un saludo cordial,
eTux