Jun 09, 2020
Ciclo de vida de la construcción de un
producto de software
2
Material preparado por Rubby Casallas
Ciclo de vida de la construcción de un
producto de software• Fuentes (cientos, miles)
• Datos de configuración
• Librerías en diferentes
versiones (de terceros,
propias, locales)
3
Material preparado por Rubby Casallas
Ciclo de vida de la construcción de un
producto de softwareConstruir un producto de
manera repetible:
siguiendo el mismo
proceso y utilizando las
mismas fuentes,
versiones de librerías,
datos de config, …
4
Material preparado por Rubby Casallas
Ciclo de vida de la construcción de un
producto de software
Espacio local
compilar empaquetar desplegar
Proceso mínimo:
5
Material preparado por Rubby Casallas
Ciclo de vida de la construcción de un
producto de software
Si el proceso no está bien definido, puede
pasar que :
1. Se usen las librerías o las versiones de las
librerías que no son
2. No haya certeza sobre cuáles fuentes se
empaquetaron
3. No estén resueltas las dependencias entre
los componentes
4. No se haya probado la aplicación que se
empaquetó
5. No esté bien configurado el servidor para el
despliegue
6. Cada desarrollador puede eventualmente
hacer un proceso distinto
7. …
6
Material preparado por Rubby Casallas
Qué es Maven?
Maven es una herramienta para administrar
la construcción de productos de software.
7
Material preparado por Rubby Casallas
Maven permite:
1. Administrar las librerías y sus versiones (de
terceros y propias)
2. Definir el proceso de construcción y
automatizarlo
3. Manejar las dependencias entre
componentes
4. Reportar y documentar el proceso y sus
resultados
8
Material preparado por Rubby Casallas
Además …
Maven se integra con otras herramientas de
tal forma que el proceso de construcción
puede incluir:
Ejecución de pruebas a distintos niveles
Generación de código
Despliegue de la aplicación sobre distintos
servidores
….
9
Material preparado por Rubby Casallas
Principales características
1. Construcción de multi módulos
(subsistemas)
2. Estructura consistente de los proyectos
3. Sistema de dependencias y manejo de
librerías
4. Modelo de construcción consistente
5. Plugin-oriented
6. Genera sitios de documentación para los
proyectos
10
Material preparado por Rubby Casallas
Principales características
1. Construcción de multi módulos
(subsistemas)
2. Estructura consistente de los proyectos
3. Sistema de dependencias y manejo de
librerías
4. Modelo de construcción consistente
5. Plugin-oriented
6. Genera sitios de documentación para los
proyectos
11
Material preparado por Rubby Casallas
Construcción de multi módulos
(subsistemas) Un producto puede ser definido como una
combinación de varios módulos
Cada módulo es un proyecto distinto
El tipo de proyecto determina el artefacto que
se construirá asociado con el comando
“Build”
El artefacto es un zip file que, dependiendo
de su tipo, empaqueta siguiendo una
estructura estándar (war, ear, jar,..)
12
Material preparado por Rubby Casallas
Construcción de multi módulos
(subsistemas) Cada proyecto tiene un archivo Pom.xml que
contiene información sobre su tipo, su
identificación, dependencias, etc.
El proyecto que define la composición de
otros módulos es de tipo Proyecto Pom
13
Material preparado por Rubby Casallas
<project>
...
<packaging>pom</packaging>
<modules>
<module>maven-training</module>
<module>maven-training-web</module>
</modules>
</project>
Ejemplo REST+Backend
Material preparado por Rubby Casallas
SportClub.service SportClub.logic
WebServices
REST Backend
EJB
SportClub
SportClub es un proyecto Maven de tipo POM Project.
Está compuesto por dos Módulos (Proyectos):
SportClub.service de tipo Maven Web Application
SportClub.logig de tipo Maven Java Application
Ejemplo Java Aplication Project: Jar packaging
Material preparado por Rubby Casallas
Principales características
1. Construcción de multi módulos
(subsistemas)
2. Estructura consistente de los proyectos
3. Sistema de dependencias y manejo de
librerías
4. Modelo de construcción consistente
5. Plugin-oriented
6. Genera sitios de documentación para los
proyectos
21
Material preparado por Rubby Casallas
2. Estructura consistente de proyectos
Maven POM (Project Object Model)
Describe un proyecto
Nombre y versión
Tipo de artefacto que empaquetará
Localización del código fuente
Dependencias
Plugins
Perfiles (Configuraciones alternativas)
Se describe utilizando un dialecto de xml
22
Material preparado por Rubby Casallas
Parámetros del proyecto
Group Id :
Nombre del grupo de proyectos. Relacionados con la
compañía o con el nombre de la aplicación. Debe ser
único (worldwide).
Artifact Id :
Nombre del componente o aplicación (proyecto:
Version:
Identificador de la versión del componente
Package Name :
Empaquetamiento donde inicialmente será
empaquetado el componente (el resultado del build)
23
Material preparado por Rubby Casallas
Parámetros del proyecto
<groupId>co.edu.uniandes.csw.spl</groupId>
<artifactId>member.web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
Format {Major}.{Minor}.{Maintenance}
Add ‘-SNAPSHOT ‘ to identify in
development
Usualmente convenciones
de paquetes java
GAV Syntax (Group:Artifact:Version): groupId:artifactId:version
pom, jar, war, ear, custom
Default is jar
24
Material preparado por Rubby Casallas
Estructura del Proyecto
Estructura Maven estandarDifferent folders for
application and test
source code
An specific folder for
binaries and packages
A project object model
(POM) specification file
25
Material preparado por Rubby Casallas
Estructura del Proyecto
Archetype:
Define una estructura especifica para los
proyectos
26
Material preparado por Rubby Casallas
Herencia en los POMs
Heredar configuraciones:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<parent>
<artifactId>maven-training-parent</artifactId>
<groupId>org.lds.training</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-training</artifactId>
<packaging>jar</packaging>
</project>
27
Material preparado por Rubby Casallas
Principales características
1. Construcción de multi módulos
(subsistemas)
2. Estructura consistente de los proyectos
3. Sistema de dependencias y manejo de
librerías
4. Modelo de construcción consistente
5. Plugin-oriented
6. Genera sitios de documentación para los
proyectos
28
Material preparado por Rubby Casallas
3. Sistema de dependencias y manejo
de librerías Depósitos de librerías (artefactos war,jar,
ear,..)
Una librería tiene un identificador (GAV)
único en un depósito
29
Material preparado por Rubby Casallas
3. Sistema de dependencias y manejo
de librerías Se describe:
GAV, Scope: compile, test, provided
(default=compile) y Type: jar, pom,
<project>
...
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
30
Material preparado por Rubby Casallas
Alcance de las dependencias
Compile:
scope por defecto. Las
dependencias están
disponibles en el proyecto y en
sus proyectos dependientes.
Provided:
se espera que el JDK, la
aplicación o el contenedor
provea la dependencia
Runtime:
la dependencia no es
requerida en tiempo de
compilación pero sí para la
ejecución.
Test:
son dependencias que son
requeridas solo cuando se
compila y ejecuta los test.
System:
similar a provided pero se le
debe indicar el jar que contiene
la dependencia
Import:
Indica que el POM utilizado
debe ser remplazado con las
dependencias que éste tenga
en su sección
31
Material preparado por Rubby Casallas
Depósitos de artefactos
Maven maneja 3 niveles de depósito:
local,
Global,
empresarial
32
Material preparado por Rubby Casallas
Depósitos de artefactos: Local .m2
El depósito local (.m2) se guarda localmente
en la máquina de desarrollo
33
Material preparado por Rubby Casallas
Depósitos de artefactos: Global
Los repositorios globales son repositorios
públicos que almacenan librerías de uso
compartido.
Por ejemplo el repositorio mismo de Maven o
el repositorio público de Jboss, Glassfish o
maven central.
34
Material preparado por Rubby Casallas
Material preparado por Rubby Casallas
Depósitos de artefactos: Empresarial
Tiene la misma estructura que el repositorio
local con la diferencia que almacena librerías
de uso compartido a nivel de red.
36
Material preparado por Rubby Casallas
<project>
...
<repositories>
<repository>
<id>my-internal-site</id>
<url>http://myserver/repo</url>
</repository>
</repositories>
...
</project>
Existen varios tipos de depósitos
Apache Archiva (http://archiva.apache.org)
37
Material preparado por Rubby Casallas
Repository Managers
Artifactory
(http://sourceforge.net/projects/artifactory/ )
38
Material preparado por Rubby Casallas
Repository Managers
Sonatype Nexus (http://nexus.sonatype.org/)
39
Material preparado por Rubby Casallas
Búsqueda de dependencias…
Cuando se buscan las dependencias (por
ejemplo durante la compilación):
primero buscar en el repositorio local,
si no las encuentra recurre a sus repositorios
empresariales (definido en un archivo
.settings.xml) o de red y en caso de no encontrar
ahí
busca en los repositorios globales.
40
Material preparado por Rubby Casallas
Búsqueda de dependencias …
Es importante notar que una vez ubicada una
librería en alguno de los repositorios
empresariales o globales externos Maven
inmediatamente lo descarga al repositorio
local
41
Material preparado por Rubby Casallas
Principales características
1. Construcción de multi módulos
(subsistemas)
2. Estructura consistente de los proyectos
3. Sistema de dependencias y manejo de
librerías
4. Modelo de construcción consistente
5. Plugin-oriented
6. Genera sitios de documentación para los
proyectos
42
Material preparado por Rubby Casallas
4. Modelo de construcción consistente
• Default lifecycle
– generate-sources/generate-resources
– compile
– test
– package
– integration-test (pre and post)
– Install
– deploy
43
Material preparado por Rubby Casallas
Understanding Maven
Additional tasks for Maven
Clean
Assembly:assembly
Site
Site-deploy
…
Maven plugins pueden tener tareas
adicionales
44
Material preparado por Rubby Casallas
Lifecycle “goal”
• mvn install
– Invokes generate* and
compile, test, package,
integration-test, install
• mvn clean
– Invokes just clean
• mvn clean compile
– Clean old builds and
execute generate*,
compile
• mvn compile install
– Invokes generate*,
compile, test,
integration-test,
package, install
• mvn test clean
– Invokes generate*,
compile, test then
cleans
45
Material preparado por Rubby Casallas