jueves, 17 de septiembre de 2009

Qué es Maven

Maven es una herramienta de gestión de proyectos que se basa en la “convención sobre configuración”. Es decir, asume un comportamiento por defecto que permite empezar a trabajar sin necesidad de configuración. Por ejemplo, Maven asume la estructura de los ficheros del proyecto, con lo cual a la hora de compilar no se pierde tiempo indicando donde se encuentra el código fuente o las librerías como en Ant.

Maven define, entre otras cosas:
  • Un modelo de objeto del proyecto.
  • Un sistema de gestión de dependencias.
  • El ciclo de vida del proyecto.
  • La lógica para ejecutar nuevas tareas en determinadas fases del ciclo de vida.


Modelo de objeto del proyecto (POM – Project Object Model)

EL POM describe todas las propiedades del proyecto. Entre la información que encontramos en el POM se puede destacar:
  • Coordenadas del proyecto: es la información que permite identificar de forma única a un proyecto.
  • Propiedades administrativas del proyecto: licencia, miembros del proyecto.
  • Dependencias del proyecto: puede referirse a otros proyectos.
  • Repositorios remotos: se pueden referenciar repositorios de artefactos Maven, de los cuales los proyectos pueden obtener sus dependencias.
  • Plugins de terceros: permiten añadir al proyecto funcionalidad específica para su desarrollo.

La existencia del POM permite:
  • Reutilización universal de la lógica de construcción: puesto que los plugins trabajan sobre el POM, éstos pueden ser reutilizados ya que no hay dependencias de la localización del proyecto.
  • Portabilidad e integración de herramientas: todos los IDEs tienen ahora un lugar común donde buscar información sobre el proyecto.
  • Búsqueda y filtrado sencillo de artefactos del proyecto: exiten herramientas de gestión de repositorios que pueden usar la información almacenada en el POM para buscar e indexar los elementos de un repositorio.


Sistema de gestión de dependencias

A través del POM se conocen las dependencias de un proyecto. A su vez, estas dependencias pueden tener más dependencias definidas en sus respectivos POM, que se llaman dependencias transitivas. Maven se encarga de recoger automáticamente todo el árbol de dependencias de un proyecto, liberando de esta gestión al desarrollador.

Ciclo de vida del proyecto

Maven define las sucesivas fases del ciclo de vida de un proyecto, de modo que para poder ejecutar una fase, se deben poder ejecutar de forma ordenada todas las fases anteriores del ciclo de vida. Por ejemplo, antes de poder empaquetar un proyecto, debe ser posible compilarlo y realizar pruebas unitarias.

Lógica para ejecutar nuevas tareas en determinadas fases del ciclo de vida

Maven delega gran parte de su responsabilidad en plugins de terceros que intervienen en el ciclo de vida del proyecto. Estos plugins se encargan de compilar, empaquetar o crear sitios web con información sobre el proyecto. La inteligencia de Maven se encuentra en estos plugins, que pueden ser descargados del repositorio de Maven.

Conclusión

Maven es una herramienta que facilita la gestión de proyectos en varios sentidos, entre los cuales cabría destacar:
  • Define una estructura genérica del proyecto, reutilizable por los distintos IDEs.
  • Estandariza las fases del ciclo de vida de los proyectos, de forma que se puede trabajar de la misma forma en cualquier proyecto.
  • Facilita la gestión de dependencias, eliminando la necesidad de recuperarlas de forma manual.

Referencias:
Apache Maven
Maven definitive guide

3 comentarios:

  1. Hola, leyendo esta explicacion y mirando por ahi no logro comprender las dimensiones de maven, es que tengo algunas dudas, por favor si me pueden ayudar, son las siguientes:
    ¿Es un framework?
    ¿Funciona en proyectos web JEE, JSP, JSF y tambien en proyectos JSE?
    ¿Sirve de repositorio como Github?
    Suponiendo que sea framework, algo que leí es que ¿uno puede instalar plugins o configurar repositorios para las dependencias, como por ejemplo un plugin ORM o algo de manejo de interfaz o algo para validar los usuarios, permisos, etc..., parecido a lo que es una gema en Ruby on Rails o un plugin de wordpress?.

    Jejeje que pena si me alargue con las preguntas, pero me hice muchas ideas, si me puedes aclarar algunas o todas estare muy agredecido. Saludos

    ResponderEliminar