Este tutorial explica conceptos básico de Maven para entender su funcionamiento.

¿Que es Maven?

    • Es una herramienta de gestión de proyectos de software.
    • La palabra MAVEN es de origen judío y significa “acumulador de conocimiento”.
    • MAVEN comenzó originalmente como un intento para simplificar el proceso de construcción del proyecto Apache Turbine.
    • La gente del proyecto Apache Turbine buscaba:
      • una forma de estandarizar la forma en que se construyen los proyectos.
      • una definición clara del proyecto y de lo que lo constituye.
      • una forma fácil de publicar información del proyecto.
      • una forma de compartir JAR’s a través de muchos proyectos.

     

      Beneficios

        • Simplifica drásticamente  la forma en que se construye un proyecto, ya que cada construcción sigue un procedimiento estándar
        • Permite a los desarrolladores moverse entre proyectos y no necesitan aprender cómo compilar o empaquetar. Esto mejora el mantenimiento y la re-usabilidad.

        • Maven se basa en patrones y en estándares. Esto permite a los desarrolladores moverse entre proyectos y no necesitan aprender cómo compilar o empaquetar. Esto mejora el mantenimiento y la re-usabilidad.

          Arquetipos

            • Un Arquetipo es una plantilla Maven. Cuando se quiere crear un proyecto con maven existen diferentes plantillas con estructuras o arquetipos de proyectos Web, standAlone, etc.
            • Un Arquetipo entrega un Pom.xml , una estructura de carpetas y ficheros por defecto.

            POM

                • Basado en el concepto de modelo de objeto de proyecto (POM) Maven puede gestionar la construcción de un proyecto, presentación de informes y documentación desde una pieza central de información.
                • Toda la especificación del proyecto al encontrarse en un archivo (POM) puede ser versionada junto con el código de fuente.

                Gestión de dependencias

                    • Maven hace la gestión de librerías, incluso teniendo en cuenta las dependencias transitivas. Es decir, si A depende de B y B depende de C, es que A depende de C. Esto quiere decir que cuando empaquetamos A, Maven se encargará de añadir tanto B como C en el paquete.
                    • Todas las dependencias son descargadas automáticamente.

                    • Un artefacto es un componente de software que podemos incluir en un proyecto como dependencia.
                    • Los artefactos pueden tener dependencias entre sí, por lo tanto, si incluimos un artefacto en un proyecto, también obtendremos sus dependencias.
                    • Un grupo es un conjunto de artefactos. Es una manera de organizarlos.
                    • Ejemplo: todos los artefactos de Spring Framewok se encuentran en el grupo org.springframework.

                      Artefacto

                        Un Artefacto puede verse como una librería con esteroides. Es decir contiene las clases propias pero además incluye toda información necesaria para su correcta gestión (grupo, versión, dependencias, etc).  

                        Para definir un artefacto se debe crear un fichero POM.xml ( Proyect Object Model) que es el encargado de almacenar toda la información (Nombre, Grupo, Versión, Dependencias, Plugins).

                        Repositorios

                          Lifecycle

                              Maven se basa en un ciclo de vida, permite gestionar el proyecto de software desde su concepción, empaquetar lo hasta su distribución en algún contenedor de aplicaciones. repositorio u otro ambiente.

                               

                              Cada ciclo de vida está marcado por Goals o comandos, lo que se mencionan a continuación:

                              1. validate
                              2. generate-sources
                              3. process-sources
                              4. generate-resources
                              5. process-resources
                              6. compile
                              7. process-classes
                              8. generate-test-sources
                              9. process-test-sources
                              10. generate-test-resources
                              11. process-test-resources
                              12. test-compile
                              13. test
                              14. prepare-package (maven 2.1+)
                              15. package
                              16. pre-integration-test
                              17. integration-test
                              18. post-integration-test
                              19. verify
                              20. install
                              21. deploy

                              Goals / Faces

                                Un Goal o Fase está asociado a un punto del ciclo de vida y es ejecutado por medio de un comando Maven.

                                Nomenclatura es :

                                • mvn $GOAL

                                Goals más frecuentes:

                                • validate
                                • compile
                                • test
                                • package
                                • verify
                                • install
                                • deploy

                                mvn clean :

                                   


                                  Referencias