miércoles, 24 de noviembre de 2010

Uso de Apache Maven para gestión del ciclo de vida de aplicaciones Java

Hace tiempo que tenía ganas de escribir sobre las virtudes de Apache Maven. Para los que no la conozcáis, se trata de una potentísima herramienta para la gestión del ciclo de vida y dependencias de proyectos escritos en Java. Si conocéis ant, maven es una evolución que permite gestionar todas las fases de un proyecto java (compilación, ejecución de pruebas, despliegue en distintos servidores de aplicaciones, etc.) configurando todo esto en un fichero xml.
En ICM (Comunidad de Madrid) hemos creado un nuevo framework para el desarrollo de aplicaciones Java/J2EE (framework ATLAS), y maven es la herramienta sobre la que se sustentan todos los procesos del framework. Os comento algunas de las características de maven que me parecen interesantes, y cómo hacemos uso de ellas en ATLAS:
  • Gestión de dependencias:
    • Un proyecto gestionado con Maven no necesita incluir las librerías (jar's) dentro del proyecto, es decir, no necesitamos bajarnos todos los jar's de un proyecto y situarlos en el directorio de librerías. Para utilizar una librería desde nuestro proyecto, sólo hay que indicar la versión de la librería que deseamos utilizar en el fichero de configuración de maven (pom.xml), y maven se encarga de descargarla desde repositorios públicos existentes.
    • Además, si una determinada librería a su vez tiene dependencias con otras, maven accede de forma recursiva a estas otras hasta descargar todo lo necesario para que nuestro proyecto funcione (dependencias transitivas). Esta gestión de dependencias de los jars es muy potente, y nos permite resolver los típicos conflictos de versiones y duplicidad de librerías en aplicaciones Java.
    • En ATLAS todas las librerías que pueden ser incluídas en cualquier proyecto Java se publican en un repositorio propio al que los proveedores (los que desarrollan las aplicaciones) tienen acceso. Cuando un proveedor hace entrega de una aplicación, sólo entrega el código fuente y el fichero de configuración de maven (no entrega jars), y es durante la instalación de la aplicación en los distintos entornos de ICM cuando se descargan las librerías necesarias para compilar ese proyecto. Con esto nos aseguramos que ningún proveedor incluye en su aplicación una librería que no esté autorizada.
  • Control de Versiones:
    • En maven todo está versionado. Cualquier proyecto realizado con maven necesita tener una versión. Lo mismo sucede con todas las librerías de las que depende el proyecto.
    • Al estar gestionado por maven, todo en ATLAS también está versionado. Así, actualmente, cada mes publicamos una nueva versión/revisión del framework. Cada versión del framework puede utilizar distintas versiones de librerías, sin que ello suponga ningún dolor de cabeza (proyectos con versiones distintas del framework conviven sin problemas en el mismo servidor de aplicaciones). Cuando arranca un nuevo desarrollo, éste lo hace con la última versión de atlas disponible en ese momento. Las versiones liberadas de ATLAS no se modifican, por lo que el framework puede evolucionar sin el riesgo de afectar a los proyectos en curso.
  • Generación de Aplicaciones a partir de Arquetipos:
    • Maven permite la creación de plantillas de partida para aplicaciones, llamadas arquetipos. Con esto, cuando deseamos empezar un nuevo proyecto, en lugar de empezar desde cero podemos utilizar una de estas plantillas como punto de partida.
    • En ATLAS hemos creado varios arquetipos como punto de partida para las aplicaciones que deseen desarrollar los proveedores. Así, tenemos arquetipos para aplicaciones web, aplicaciones batch, librerías, servicios web, etc. Esto ahorra semanas de trabajo al proveedor, ya que al generar una aplicación desde un arquetipo ésta es totalmente operativa y contiene ejemplos de uso de todos los componentes de ATLAS.
  • Gestión de la configuración dependiendo del entorno:
    • Maven permite la creación de perfiles, que son distintas configuraciones del ciclo de vida de la aplicación. Al compilar y desplegar una aplicación podemos decidir activar uno de estos perfiles, y así se utilizará una configuración específica para realizar esta compilación/despliegue.
    • En ATLAS utilizamos los perfiles de Maven para configurar el despliegue de una aplicación en los distintos entornos (entorno de desarrollo, validación, preproducción, producción, etc.). El proveedor define todas las variables de configuración de la aplicación en un fichero llamado "environment.properties", que es distinto para cada entorno. Así, cuando el personal de ICM necesita desplegar una aplicación en un entorno determinado, sólo es necesario ejecutar maven activando el perfíl correspondiente a dicho entorno. Maven se encarga de desplegar automáticamente la aplicación en el servidor Weblogic del entorno especificado. Esto simplifica enormemente los procesos internos de despliegue de aplicaciones (incluidos los pasos a producción)
  • Desarrollo ágil con servidor de aplicaciones local:
    • Puede configurarse Maven para que automáticamente ejecute un servidor de aplicaciones y arranque la aplicación en la que estamos trabajando sobre dicho servidor (jetty, tomcat, etc.).
    • En ATLAS, aunque el servidor final en el que se despliegan las aplicaciones es Oracle Weblogic, se puede ejecutar maven de manera que levante automáticamente un servidor jetty para probar nuestra aplicación durante la fase de desarrollo. Esto acorta los tiempos de desarrollo, ya que para probar una aplicación web no es necesario generar el fichero ".war" y desplegarlo en un servidor, maven hace todo esto automáticamente.
  • Generación automática de un site en HTML con información del proyecto:
    • Con maven puede ejecutarse una tarea que genera automáticamente un site en HTML con toda la información relativa al proyecto (incluyendo JavaDoc, dependencias, y un montón de cosas más).
    • El framework ATLAS se acompaña de una normativa en la que se indica a los proveedores una serie de reglas a seguir para el desarrollo de aplicaciones. Además de utilizar la generación automática del site para todas las aplicaciones, hemos desarrollado un plugin propio que es capaz de publicar en este site un informe sobre el grado del cumplimiento de la normativa de una determinada aplicación. Esto supone un importantísimo avance y ahorre de tiempo respecto al procedimiento anterior (el proveedor no sabía si estaba cumpliendo bien o mal la normativa hasta que no entregaba la aplicación finalizada). Ahora, el proveedor puede ejecutar esta herramienta en cualquier momento, y corregir los incumplimientos de la normativa durante el desarrollo. Además, con esta herramienta se ha automatizado gran parte del procedimiento de comprobación de la calidad de un proyecto (realizado por un departamento interno de ICM), que anteriormente se realizaba de manera manual.
Estas son algunas de las virtudes de Maven, y me dejo muchas en el tintero. Al comenzar el desarrollo de ATLAS, maven era una simple herramienta de compilación, pero gracias a su potencia se ha convertido en la piedra angular sobre la que gira todo el ciclo de vida de las aplicaciones desarrolladas con este framework, ahorrando mucho tiempo y quebraderos de cabeza tanto a desarrolladores como al personal de ICM que se encarga de instalar y mantener las aplicaciones en los distintos entornos.