Maven Build & Deployment Part I Carlos Alberto López [email protected] Carlos Alberto López...

23
Maven Build & Deployment Part I Carlos Alberto López [email protected]

Transcript of Maven Build & Deployment Part I Carlos Alberto López [email protected] Carlos Alberto López...

Page 1: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

MavenBuild & Deployment

Part I

Carlos Alberto Ló[email protected] Alberto Ló[email protected]

Page 2: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Agenda

• Introducción• Objetivos • Lo que no es Maven• Características• Descarga e instalación• Build Project [clean / install]• Unit Test• Phases• Top plugins• Estructura de proyectos• El POM• Build & Package

• Proyecto de ejemplo

Page 3: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Introducción

• Antes de maven (…2001)

• Que es maven?

• Convención sobre configuración

Page 4: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Objetivos• Construcción de software mas sencilla.

• Maven no elimina la necesidad de saber cuáles son los mecanismos que hay debajo, maven proporciona un escudo que esconde los detalles.

• Sistema de construcción uniforme.

• Maven permite generar el build de un proyecto utilizando su Modelo de Objetos de Proyecto (POM) y un conjunto de plugins que son compartidos por todos los proyectos.

• Información de calidad sobre los proyectos.

• Maven proporciona información útil del proyecto que es en parte extraída del POM y en parte generada de los fuentes del proyecto.

• Mejores prácticas de desarrollo.

• Maven tiene como objetivo recoger las principales prácticas del buen desarrollo y facilita guiar un proyecto en esa dirección.

• Migración transparente a nuevas características.

• Maven proporciona una forma fácil de obtener las actualizaciones de manera que puedan aprovecharse todas las ventajas de los cambios que se hayan hecho.

Page 5: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Lo que no es Maven

Lo que algunos piensan sobre Maven:

•Maven es una herramienta de documentación.

•Maven es una extensión de Ant que te permite descargar dependencias.

•Maven es un conjunto de scriptlets Ant reutilizables.

Maven hace todo esto, pero no son las únicas características que tiene y sus objetivos son en verdad diferentes.

Maven nos empuja hacia las mejoras practicas aunque algunos proyectos podrían no ajustarse con estos ideales. Aún así Maven esta diseñado para ser flexible a las necesidades de diferentes proyectos.

Page 6: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

CaracterísticasConvención sobre ConfiguraciónMaven se encarga de tomar por defecto una serie de decisiones a priori (estructura del proyecto, ubicación donde se van a encontrar los fuentes o ficheros de recurso, compilador a emplear, etc.) Esto facilita el desarrollo de software y hace más fácil a otros desarrolladores incorporarse a los proyectos.

Reusabilidad de un ProyectoMaven facilita un repositorio central desde donde podemos bajar los distintos proyectos, bibliotecas o plugins que se requieran para construir un proyecto. Es aquí donde radica el concepto de reusabilidad, ya que solo se necesita incluir dicho repositorio y coger de el lo que necesitemos.

Modelado de un ProyectoLos proyectos con maven se definen por archivo .xml denominado pom.xml. Este archivo será el encargado de definir las características que contendrá el proyecto además de gestionar las dependencias del mismo.

Page 7: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Características…Repositorios RemotosMaven se encarga de traer a nuestro entorno local (repositorio local) las dependencias ubicadas en el repositorio central y agregarlas como dependencias a nuestro proyecto. Además, se pueden incluir otros repositorios de donde descargar dependencias, como también crear un repositorio propio dentro de la organización.

Reutilización de la lógica de negocioCon maven se puede compilar, probar, empaquetar, desplegar y distribuir nuestro proyecto con una línea por consola de comandos.

Ciclo de vida de un proyectoEl ciclo de vida de Maven son las diferentes fases por las que atraviesa el proyecto. Maven permite agregar nuevas fases a las ya predefinidas. Las fases predefinidas son las siguientes:

compile: compila los fuentes de nuestro proyecto.

test: ejecuta los test desarrollados para el proyecto.

package: empaquetará nuestro proyecto con el formato que queramos (jar, war, ear, …).

install: instalará nuestro proyecto en el repositorio local de Maven.

deploy: despliega la aplicación.

Page 8: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Agenda

• Introducción• Objetivos • Lo que no es Maven• Características• Descarga e instalación• Build Project [clean / install]• Unit Test• Phases• Top plugins• Estructura de proyectos• El POM• Build & Package

• Proyecto de ejemplo

Page 9: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Descarga e instalaciónRequisitosMaven es una herramienta Java por lo que se necesita tener JDK (no JRE) Java 1.5 o superior.

Descarga e InstalaciónIr al sitio de Apache Maven http://maven.apache.org/download.html y descargar el software (actualmente en versión 3.1.1) e instalar acorde a su sistema operativo.

Crear una variable de entorno MVN_HOME que apunte al directorio donde fue descomprimido el archivo.

Probar la instalación ejecutando mvn –version, debería ver un resultado como este:

Page 10: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Construir proyecto [clean/install]mvn cleanDesde la consola, en el directorio del pom.xml ejecutar mvn clean, este comando elimina todos los archivos .class y .jar generados.

mvn installLuego de haber limpiado el proyecto se puede hacer un compilado desde cero utilizando mvn compile, esta instrucción genera los archivos .class compilando los fuentes .java.

Al finalizar la compilación se ejecuta mvn install para generar el artefacto (jar o war) y copiar el archivo generado al directorio local de dependencias (.m2) . De esta forma esas dependencias pueden utilizarse en otros proyectos maven dentro de la misma maquina.

El proceso de instalación tratará de ejecutar las pruebas unitarias definidas en el proyecto (si hubieran) y si estas fallaran se abortará el proceso de instalación y no se crearán los artefactos.

Page 11: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Unit testingJUnitPara integrar Junit con maven basta con agregar la dependencia en nuestro pom.

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

<scope>test</scope>

</dependency>

Integración con el código fuenteLa integración se hace a través de anotaciones agregando a los metodos de prueba la anotación @Test, estos no deben retornar parametros y ser públicos.

@Test

public void testSuma() {

...

}

Page 12: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Unit testing…Integración con el código fuenteSi se deseara validar que el método devuelva alguna excepción utilizamos:.

@Test( expected= MyException.class)

public void testSuma() {

...

}

Si quisieramos que el método no se tome en cuenta utilizamos la anotación @Ignore.

JUnit permite definir como se han de ejecutar los tests, mediante el uso de diferentes TestRunners con la anotación @RunWith.

JUnit4 Runner por defecto

Parameterized Ejecuta múltiples veces cada test con diferentes parámetros

Suite Runner de los Test Suite

SpringJUnit4ClassRunner Runner de Spring para que los tests puedan trabajar con el contenedor de IoC

Page 13: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Agenda

• Introducción• Objetivos • Lo que no es Maven• Características• Descarga e instalación• Build Project [clean / install]• Unit Test• Phases• Top plugins• Estructura de proyectos• El POM• Build & Package

• Proyecto de ejemplo

Page 14: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

PhasesPara maven una es un paso en el ciclo de vida de una construcción, el cual a la vez es una secuencia ordenada de fases.

Cuando una fase es dada, maven ejecuta cada fase según la secuencia definida e incluye la fase indicada.

FASE DESCRIPCION

Validate Verifica que el proyecto sea correcto y toda la información este disponible.

Compile Compila el código fuente del proyecto.

Test Ejecuta los casos de prueba del proyecto utilizando un framework para pruebas unitarias.

Package Genera un archivo jar ó war.

Integration-Test Procesa y despliega el paquete generado en la fase Package en un ambiente de donde las pruebas de integración puedan ser ejecutadas.

Verify Comprueba que el paquete sea valido y cumpla con los criterios de calidad.

Install Instala el paquete en el repositorio local para uso como dependencia en otros proyectos locales.

Deploy Copia el paquete a un repositorio remoto para ser compartido en con otros desarrolladores ó proyectos.

Page 15: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

PluginsExisten en Maven 2 tipos de plugins:

• Build plugins: Son ejecutados durante el procesos de generación de un build.

• Report plugins: Son ejecutados durante la fase site.

Los plugins mas comunes son:

PLUGIN DESCRIPCION

ejb Crea un EJB para el proyecto

jar Crea un JAR para el proyecto

rar Crea un archivo RAR para el proyecto

war Crea un WAR para el proyecto

pdf Genera un PDF con la documentación del proyecto

eclipse Genera un archivo de proyecto para eclipse

Page 16: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Estructura de proyectosMaven cuenta con una estructura de directorios que permite a los usuarios familiarizarse rápidamente con un proyecto.

DIRECTORIO DESCRIPCION

src/main/java Fuentes de la aplicación

src/main/resources Recursos de la aplicación

src/main/webapp Fuentes de la aplicación web

src/test/java Fuentes de los casos de prueba

src/test/resources Recursos de los casos de prueba

Page 17: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

El POMEl POM o Project Object Model es un archivo XML que contiene la información acerca del proyecto y los detalles de configuración utilizados por Maven para construir un proyecto.

Los requerimientos mínimos del POM son los siguientes:

•Project root

•modelVersion

•groupId

•artifactId

•Version

Ejemplo de los requerimientos mínimos de un POM:

Page 18: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Super POMEl súper POM es el archivo POM default de Maven, indirectamente todos los POM extienden el súper POM.

El súper POM es similar al siguiente ejemplo:

Page 19: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Super POMEl súper POM es el archivo POM default de Maven, indirectamente todos los POM extienden el súper POM.

El súper POM es similar al siguiente ejemplo:

Page 20: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Dependencias

Dependencias Transitivas

Se importan automáticamente.

Scope de las Dependencias

compile, provided, runtime, test, system

Page 21: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

• Proyecto de ejemplo

Page 22: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Agradecimiento

● Marvin Díaz● Oswaldo López● Virgil Jones● Eder Santos● Gilberto Orozco

Page 23: Maven Build & Deployment Part I Carlos Alberto López newalopez@gmail.com Carlos Alberto López newalopez@gmail.com.

Gracias! … continuará....

[email protected]

Stackoverflow: newalopez