2. Lo que tengo
● Tengo una aplicación que usa jars de múltiples librerías.
● Algunas de las librerías tienen que ser incluidas en el paquete
generado (JAR, WAR, EAR, AAR ...) y otras no.
● Algunas librerías tienen que estar disponibles en entorno de
desarrollo y luego deben estar presentes en el runtime del
servidor.
● Algunas librerías dependen de otras librerías (y otras de algunas).
● Tengo múltiples desarrolladores que trabajan sobre el mismo
fuente.
3. Lo que quiero
● Quiero poder incorporar fácilmente a otro desarrollador al
proyecto pero no quiero tener que pasarle ~100MB de librerías.
● Quiero que generar el EAR sea fácil y rápido a partir de los
fuentes y que no dependa de la máquina del desarrollador.
● Quiero poder ejecutar constantemente las pruebas
unitarias para asegurar que los cambios que voy haciendo no afecten
funcionalidad anterior.
● Quiero tener métricas de calidad del fuente actualizados para
conocer el nivel de calidad del software.
● Quiero tener una versión actualizada de la
documentación.
4. ¿Qué es maven?
● Estandariza, facilita y apoya el ciclo de vida de builds de una
aplicación.
○ validate - validar que el proyecto es correcto y que toda la información necesaria está
presente.
○ compile - compilar el código fuente
○ test - ejecutar pruebas unitarias sin la necesidad de empaquetar y desplegar la
aplicación
○ package - generar un paquete distribuible (jar, war, ear ...)
○ integration-test - procesar y desplegar el empaquetado en un ambiente donde se
ejecute pruebas de integración
○ verify - validar que el empaquetado satisface criterios de calidad
○ install - instalar el paquete el el repositorio local
○ deploy - en ambiente de integración de release se copia el empaquetado final a un
repositorio remoto para compartir con otros desarrolladores
5. ¿Qué hace maven?
● Permite crear proyectos en base a plantillas preexistentes (y crear las
propias).
● Describe el proyecto y sus dependencias declarativamente (POM).
● Administra dependencias (y dependencias de las dependencias).
● Genera empaquetados de manera uniforme.
● Genera documentación a partir de los fuentes.
● Reportes de calidad de código.
● Extensible a través de plugins.
● Convención sobre configuración. Todos los defaults son modificables.
● Integración con sistemas de control de versiones e integración continua.