SlideShare una empresa de Scribd logo
Maven

Divide tu código,
pruébalo y
vencerás
WUL4 Trainning Thursday 3
Cristian Romero Matesanz
cristianprofile@gmail.com

20-02-2014
Índice
 1.Diferencia

proyectos antes/después de

usar Maven
 2.Importancia de las pruebas en tus
programas
 3.Ventajas del uso de Maven
 4. Estructura de un proyecto Maven
 5. Fases de un proyecto Maven
 6.Plugins Maven
Problemática de creación de un
Pocos módulos
proyecto sin Maven

Proyectos grandes

5. Papá y ahora como
lo probamos?
4. Como metemos
una nueva
librería?

Controladores
Rest

3. Como modificamos
alguna versión de una
librería?
2. Por qué cada
proyecto tiene distinta
estructura?

1. Como me instalo
el proyecto?

Servicios

Util’s
ws

¿?
¿?

Dao
batch

Jar 1
Jar 2
Jar 3
Jar 200
Muchos módulos muy pequeños

PROYECTO CON
MAVEN
Core Api (Excepciones
Dtos usados etc..)

Dao Api (Excepciones
Pojos, interfaz)
Dao
Service api (Excepciones,
interfaz, dto)

Core

Service impl
Controlador
aplicación

Servicio Rest

Parent Pom (Gestión de versiones de librerías a usar)
La importancia de los test
1908 Ford T

Pruebas de toda la arquitectura
Códigos poco mantenibles
+ acoplamiento - cohesión
Los errores encontrados fase final
- Coste prevención < Coste correctivo
(Efecto propagación de errores)
- Mantenimientos costosos
- Código copy-paste
- Uso de librerías sin pruebas

2013 Test Dummies

Automatizable

Rápida

Repetible

Profesional

Independiente

Test Unitarios

Test Integración

Test de carga

Test hacking
Por qué usar Maven









Estandariza la estructura de directorios
Gestión de dependencias
Estandariza el ciclo de vida
Reutilización de módulos
Facilita probar tu código de manera unitaria y de
integración: muchos módulos con poco código.
Delegar obligaciones. Evitar código Espagueti.
Facilita la integración continua: Jenkins trabaja por ti. Ej:







Pruebas de carga (Jmeter )
Pruebas unitarias y de integración con cada cambio en
el repositorio.
Calidad del código (Sonnar)
Despliegues automáticos.

Se compone de muchos plugins que facilitan las tareas
del día a día dentro de tu proyecto
Estructura de un
proyecto Maven









src/main/java : clases del modulo creado
src/main/resources : aquí almacenaremos los recursos
(ficheros xml, ficheros de propiedades, imágenes, …)
que necesita nuestro modulo para funcionar.
src/test/java : clases test para probar las clases de
nuestro módulo.
src/test/resources : ficheros de recursos para pruebas.
Pom.xml: descripción de nuestro modulo (nombre,
version, dependencias a usar y plugins)
Target: carpeta que usa maven para dejar almacenada
los resultados de los comandos.

Nota: todo proyecto o modulo maven hereda de un “super pom” donde se define
el build por defecto, para que todos los proyectos usen toda la estructura
Pom.xml el corazón de maven
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<groupId>es.wul4.demoapp</groupId>
<artifactId>wul4Service</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>mi primer modulo maven</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Pom.xml el corazón de maven


groupId :identificará su proyecto de forma única
(formato de paquetes proyecto java)

Una buena idea a la hora de nombrarlo es tener en
cuenta la estructura del proyecto. Si se trata de un
proyecto agregaremos al nombre del parde un
nuevo id.
org.apache.maven, org.apache.maven.plugins,
org.apac he.maven.reporting








artifactId: Es el nombre del jar sin version.
maven, commons-math
version identificador de la versión del la
libreria(1.0, 1.1, 1.0.1, ...). No usar fechas, seran
usadas para las versiones snapshot que
tengamos en desarrollo pero no publicadas para
su uso.
Packaging: jar, war, ear and pom
Pom.xml: dependencias
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>







compile – es el valor por defecto. Se utiliza en
todos los casos (compilar, ejecutar, ...).
provided – también se utiliza en todos los casos,
pero se espera que el jar sea suministrado por la
JDK o el contenedor. Es decir, no se incluirá al
empaquetar el proyecto, ni en el repositorio.
runtime – no se utiliza para compilar, pero si es
necesario para ejecutar.
test – Sólo se utiliza para compilar o ejecutar los
test.
system – es similar a provided, pero eres tu el que
tiene que suministrar el jar. No se incluirá al
empaquetar el proyecto, ni en el repositorio.
Pom.xml el corazón de maven
Permite herencia(podemos heredar de módulos de tipo “pom” ), de
modo que heredamos sus valores y podemos sobreescribirlos
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mylab.learn</groupId>
<artifactId>mylab-parent-pom</artifactId>
<version>1.0.0-RELEASE</version>
</parent>
<groupId>com.mylab.learn.myarchetype</groupId>
<artifactId>myarchetype-parent-pom</artifactId>
<version>1.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>myarchetype</name>
<description>my archetype parent pom, restful server and
client</description>
https://github.com/butcherless/mylab/tree/master/project-archetype

Pom.xml el corazón de Maven


SI el proyecto es de tipo pom definirá:





versiones de propiedades
Librerias que se pueden usar si heredan de mi
<dependencyManagement>
Plugins se pueden usar si heredan de mi:
<pluginManagement>

https://github.com/butcherless/mylab/blob/master/parent-pom/pom.xml



Al heredar de dicho pom se podrán usar todo lo
definido en el fichero, incluso sobrescribir las
versiones a usar (no recomendable)
Fases de un proyecto Maven









validate: Valida que el proyecto esta correcto y dispone
de la información necesaria.
compile: Compila el código fuente del proyecto.
test: Prueba el código fuente compilado haciendo uso de
frameworks para pruebas unitarias (JUnit).
package: Empaqueta el código fuente compilado (por
ejemplo creando un jar o war).
integration-test: Procesa y despliega el paquete dentro de
un entorno de test de integración.
verify: Ejecuta los controles necesarios para verificar si el
paquete es válido y cumple con los criterios de calidad.
install: Instala el paquete dentro del repositorio local, para
poder usarlo como dependencia en otro proyecto.
deploy: Copia el paquete final al repositorio remoto para
compartir con otros desarrolladores y proyectos.
mvn install mvn Package mvn clean install
El repositorio de Maven


(Remotos Pom.xml): lugares donde se conecta
para descargar librerías en local necesarias.
Por defecto Maven Central Repository. Si
necesitamos alguno adicional
<repositories>
<repository>
<id>my-internal-site</id>
<url>http://myserver/repo</url>
</repository>
</repositories>



(Local)Lugar donde se almacenan las librerías
y las versiones de nuestros módulos.


Por defecto <USER_HOME>/.m2/repository pero
se puede modificar
Plugins Maven


Componente software que agrega
funcionalidad. En el caso de Maven cada
pluging agrega nueva lógica al sistema.


Se ejecutan mvn + plugin

mvn clean
 mvn compile
 mvn pmd:pmd
 mvn cobertura:cobertura
 mvn site:site


https://maven.apache.org/plugins/
Plugins Maven
Plugins Maven
Plugins Maven
Ejemplo práctico

PROYECTO CON
MAVEN

Dao Api (Excepciones
Pojos, interfaz)

Dao
Service api (Excepciones,
interfaz, dto)
Service impl
Controlador
aplicación

Servicio Rest

Parent Pom (Gestión de versiones de librerías a usar)
Ejemplo

Más contenido relacionado

La actualidad más candente

Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
Antonio Contreras
 
Springboot Overview
Springboot  OverviewSpringboot  Overview
Springboot Overview
Jose Patricio Bovet Derpich
 
spring-boot-es
spring-boot-esspring-boot-es
Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2
guest39ff1b
 
Laravel vc
Laravel vcLaravel vc
Laravel vc
Victor Cusco
 
9.laravel
9.laravel9.laravel
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Frameworkricsoc
 
Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en Autentia
Jorge Pacheco Mengual
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web javaCésar Ocampo
 
Spring framework
Spring frameworkSpring framework
Spring framework
San Juan Guichicovi
 
Creando APIs REST con Spring Boot
Creando APIs REST con Spring BootCreando APIs REST con Spring Boot
Creando APIs REST con Spring Boot
José Antonio Escobar García
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
Iker Canarias
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
Abimael Desales López
 
Testing con selenium
Testing con seleniumTesting con selenium
Testing con seleniummarianoshin
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y Jenkins
BEEVA_es
 
Ionic2 01-introduccion
Ionic2 01-introduccionIonic2 01-introduccion
Ionic2 01-introduccion
David Vaquero
 
Introducción a Zend Framework
Introducción a Zend FrameworkIntroducción a Zend Framework
Introducción a Zend Framework
Irontec
 
Presentacion #bbmnk
Presentacion #bbmnkPresentacion #bbmnk
Presentacion #bbmnk
Juan Miqueo
 

La actualidad más candente (20)

Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
Springboot Overview
Springboot  OverviewSpringboot  Overview
Springboot Overview
 
spring-boot-es
spring-boot-esspring-boot-es
spring-boot-es
 
Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2
 
Laravel vc
Laravel vcLaravel vc
Laravel vc
 
9.laravel
9.laravel9.laravel
9.laravel
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en Autentia
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web java
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Creando APIs REST con Spring Boot
Creando APIs REST con Spring BootCreando APIs REST con Spring Boot
Creando APIs REST con Spring Boot
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Testing con selenium
Testing con seleniumTesting con selenium
Testing con selenium
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y Jenkins
 
02 instalación
02 instalación02 instalación
02 instalación
 
Ionic2 01-introduccion
Ionic2 01-introduccionIonic2 01-introduccion
Ionic2 01-introduccion
 
Introducción a Zend Framework
Introducción a Zend FrameworkIntroducción a Zend Framework
Introducción a Zend Framework
 
Presentacion #bbmnk
Presentacion #bbmnkPresentacion #bbmnk
Presentacion #bbmnk
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 

Similar a Maven Divide tu código, pruébalo y vencerás

Proyectos java-con-maven
Proyectos java-con-mavenProyectos java-con-maven
Proyectos java-con-maven
Juan Vladimir
 
Taller integracion jsf spring
Taller integracion jsf springTaller integracion jsf spring
Taller integracion jsf spring
IBM
 
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2 JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
César Pajares
 
Curso de Struts 2: Unidad Didáctica 01 El Entorno de Desarrollo
Curso de Struts 2: Unidad Didáctica 01 El Entorno de DesarrolloCurso de Struts 2: Unidad Didáctica 01 El Entorno de Desarrollo
Curso de Struts 2: Unidad Didáctica 01 El Entorno de Desarrollo
David Vaquero
 
La Arquitectura De Netbeans V2
La Arquitectura De Netbeans V2La Arquitectura De Netbeans V2
La Arquitectura De Netbeans V2
ralphkui
 
Video
VideoVideo
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completogenaro martinez
 
Maven
MavenMaven
Maven
jose diaz
 
Apache click
Apache clickApache click
Apache clickntomasto
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoAndrés Amaya
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoIgnacio Reyes
 
633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)Eduardo Monroy Husillos
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completoMETROPOLITANO
 
Tutorial mysqlphp
Tutorial mysqlphpTutorial mysqlphp
Tutorial mysqlphp
william kozisck
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoErnesto Gamboa
 

Similar a Maven Divide tu código, pruébalo y vencerás (20)

Proyectos java-con-maven
Proyectos java-con-mavenProyectos java-con-maven
Proyectos java-con-maven
 
Taller integracion jsf spring
Taller integracion jsf springTaller integracion jsf spring
Taller integracion jsf spring
 
Herramientas Java
Herramientas JavaHerramientas Java
Herramientas Java
 
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2 JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
 
Curso de Struts 2: Unidad Didáctica 01 El Entorno de Desarrollo
Curso de Struts 2: Unidad Didáctica 01 El Entorno de DesarrolloCurso de Struts 2: Unidad Didáctica 01 El Entorno de Desarrollo
Curso de Struts 2: Unidad Didáctica 01 El Entorno de Desarrollo
 
La Arquitectura De Netbeans V2
La Arquitectura De Netbeans V2La Arquitectura De Netbeans V2
La Arquitectura De Netbeans V2
 
Video
VideoVideo
Video
 
Modulos
ModulosModulos
Modulos
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
php
phpphp
php
 
Php andmysql
Php andmysqlPhp andmysql
Php andmysql
 
Maven
MavenMaven
Maven
 
Apache click
Apache clickApache click
Apache click
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
Php andmysql (1)
Php andmysql (1)Php andmysql (1)
Php andmysql (1)
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo
 
Tutorial mysqlphp
Tutorial mysqlphpTutorial mysqlphp
Tutorial mysqlphp
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 

Último

Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
Ing. Julio Iván Mera Casas
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
espinozaernesto427
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 

Último (20)

Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 

Maven Divide tu código, pruébalo y vencerás

  • 1. Maven Divide tu código, pruébalo y vencerás WUL4 Trainning Thursday 3 Cristian Romero Matesanz cristianprofile@gmail.com 20-02-2014
  • 2. Índice  1.Diferencia proyectos antes/después de usar Maven  2.Importancia de las pruebas en tus programas  3.Ventajas del uso de Maven  4. Estructura de un proyecto Maven  5. Fases de un proyecto Maven  6.Plugins Maven
  • 3. Problemática de creación de un Pocos módulos proyecto sin Maven Proyectos grandes 5. Papá y ahora como lo probamos? 4. Como metemos una nueva librería? Controladores Rest 3. Como modificamos alguna versión de una librería? 2. Por qué cada proyecto tiene distinta estructura? 1. Como me instalo el proyecto? Servicios Util’s ws ¿? ¿? Dao batch Jar 1 Jar 2 Jar 3 Jar 200
  • 4. Muchos módulos muy pequeños PROYECTO CON MAVEN Core Api (Excepciones Dtos usados etc..) Dao Api (Excepciones Pojos, interfaz) Dao Service api (Excepciones, interfaz, dto) Core Service impl Controlador aplicación Servicio Rest Parent Pom (Gestión de versiones de librerías a usar)
  • 5. La importancia de los test 1908 Ford T Pruebas de toda la arquitectura Códigos poco mantenibles + acoplamiento - cohesión Los errores encontrados fase final - Coste prevención < Coste correctivo (Efecto propagación de errores) - Mantenimientos costosos - Código copy-paste - Uso de librerías sin pruebas 2013 Test Dummies Automatizable Rápida Repetible Profesional Independiente Test Unitarios Test Integración Test de carga Test hacking
  • 6. Por qué usar Maven       Estandariza la estructura de directorios Gestión de dependencias Estandariza el ciclo de vida Reutilización de módulos Facilita probar tu código de manera unitaria y de integración: muchos módulos con poco código. Delegar obligaciones. Evitar código Espagueti. Facilita la integración continua: Jenkins trabaja por ti. Ej:      Pruebas de carga (Jmeter ) Pruebas unitarias y de integración con cada cambio en el repositorio. Calidad del código (Sonnar) Despliegues automáticos. Se compone de muchos plugins que facilitan las tareas del día a día dentro de tu proyecto
  • 7. Estructura de un proyecto Maven       src/main/java : clases del modulo creado src/main/resources : aquí almacenaremos los recursos (ficheros xml, ficheros de propiedades, imágenes, …) que necesita nuestro modulo para funcionar. src/test/java : clases test para probar las clases de nuestro módulo. src/test/resources : ficheros de recursos para pruebas. Pom.xml: descripción de nuestro modulo (nombre, version, dependencias a usar y plugins) Target: carpeta que usa maven para dejar almacenada los resultados de los comandos. Nota: todo proyecto o modulo maven hereda de un “super pom” donde se define el build por defecto, para que todos los proyectos usen toda la estructura
  • 8. Pom.xml el corazón de maven <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <groupId>es.wul4.demoapp</groupId> <artifactId>wul4Service</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>mi primer modulo maven</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
  • 9. Pom.xml el corazón de maven  groupId :identificará su proyecto de forma única (formato de paquetes proyecto java) Una buena idea a la hora de nombrarlo es tener en cuenta la estructura del proyecto. Si se trata de un proyecto agregaremos al nombre del parde un nuevo id. org.apache.maven, org.apache.maven.plugins, org.apac he.maven.reporting     artifactId: Es el nombre del jar sin version. maven, commons-math version identificador de la versión del la libreria(1.0, 1.1, 1.0.1, ...). No usar fechas, seran usadas para las versiones snapshot que tengamos en desarrollo pero no publicadas para su uso. Packaging: jar, war, ear and pom
  • 10. Pom.xml: dependencias <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency>      compile – es el valor por defecto. Se utiliza en todos los casos (compilar, ejecutar, ...). provided – también se utiliza en todos los casos, pero se espera que el jar sea suministrado por la JDK o el contenedor. Es decir, no se incluirá al empaquetar el proyecto, ni en el repositorio. runtime – no se utiliza para compilar, pero si es necesario para ejecutar. test – Sólo se utiliza para compilar o ejecutar los test. system – es similar a provided, pero eres tu el que tiene que suministrar el jar. No se incluirá al empaquetar el proyecto, ni en el repositorio.
  • 11. Pom.xml el corazón de maven Permite herencia(podemos heredar de módulos de tipo “pom” ), de modo que heredamos sus valores y podemos sobreescribirlos <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.mylab.learn</groupId> <artifactId>mylab-parent-pom</artifactId> <version>1.0.0-RELEASE</version> </parent> <groupId>com.mylab.learn.myarchetype</groupId> <artifactId>myarchetype-parent-pom</artifactId> <version>1.1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>myarchetype</name> <description>my archetype parent pom, restful server and client</description> https://github.com/butcherless/mylab/tree/master/project-archetype 
  • 12. Pom.xml el corazón de Maven  SI el proyecto es de tipo pom definirá:    versiones de propiedades Librerias que se pueden usar si heredan de mi <dependencyManagement> Plugins se pueden usar si heredan de mi: <pluginManagement> https://github.com/butcherless/mylab/blob/master/parent-pom/pom.xml  Al heredar de dicho pom se podrán usar todo lo definido en el fichero, incluso sobrescribir las versiones a usar (no recomendable)
  • 13. Fases de un proyecto Maven         validate: Valida que el proyecto esta correcto y dispone de la información necesaria. compile: Compila el código fuente del proyecto. test: Prueba el código fuente compilado haciendo uso de frameworks para pruebas unitarias (JUnit). package: Empaqueta el código fuente compilado (por ejemplo creando un jar o war). integration-test: Procesa y despliega el paquete dentro de un entorno de test de integración. verify: Ejecuta los controles necesarios para verificar si el paquete es válido y cumple con los criterios de calidad. install: Instala el paquete dentro del repositorio local, para poder usarlo como dependencia en otro proyecto. deploy: Copia el paquete final al repositorio remoto para compartir con otros desarrolladores y proyectos. mvn install mvn Package mvn clean install
  • 14. El repositorio de Maven  (Remotos Pom.xml): lugares donde se conecta para descargar librerías en local necesarias. Por defecto Maven Central Repository. Si necesitamos alguno adicional <repositories> <repository> <id>my-internal-site</id> <url>http://myserver/repo</url> </repository> </repositories>  (Local)Lugar donde se almacenan las librerías y las versiones de nuestros módulos.  Por defecto <USER_HOME>/.m2/repository pero se puede modificar
  • 15. Plugins Maven  Componente software que agrega funcionalidad. En el caso de Maven cada pluging agrega nueva lógica al sistema.  Se ejecutan mvn + plugin mvn clean  mvn compile  mvn pmd:pmd  mvn cobertura:cobertura  mvn site:site  https://maven.apache.org/plugins/
  • 19. Ejemplo práctico PROYECTO CON MAVEN Dao Api (Excepciones Pojos, interfaz) Dao Service api (Excepciones, interfaz, dto) Service impl Controlador aplicación Servicio Rest Parent Pom (Gestión de versiones de librerías a usar)