Está en la página 1de 44

* Introducción a Maven * Instalación de Maven

* Que es Maven? * Instalando Maven


* Caracteristicas Principales de * Directorios
Maven * Configuración de Maven
* Convención sobre la (Settings Local y Global)
Configuración * Repositorio Local y Remoto
* Modelo Conceptual de un * Ejecución y Opciones de Maven
"Proyecto”
• Problemas derivados de la construcción de
aplicaciones Java:
! Existe gran heterogeneidad en los aplicativos.
!  No se suele reutilizar todo lo que se pudiera
y se duplican librerías y artefactos.
!  El tiempo de adaptación de una persona a un
proyecto suele ser alto.
! Es difícil llevar un control de la calidad del
código.
! El proceso de actualización de versiones suele
ser engorroso.
Maven es una herramienta de administración de
proyectos que abarca:
* Modelo de Proyecto
* Conjunto de estándares
* Define el Ciclo de Vida de los Proyectos
* Sistema de administración de dependencias
* Ejecucion de goals (objetivos) en fases
definidas
* Convención sobre Configuración, es un
paradigma de programación de software
que busca disminuir el número de
decisiones que un desarrollador necesita
hacer, ganando así en simplicidad pero
no perdiendo flexibilidad por ello.
* Administración de Dependencias
* Repositorio Remoto
* Reutilización de Lógica de Construcción
* Integración y Portabilidad
* Búsqueda de Artefactos
* Verificación del JDK
* Bajar Maven (http://maven.apache.org/download.html)
* Descomprimir el archivo binario
* Configurar las variables de ambiente
C:\Users\pepe> set M2_HOME=c:\apache-maven-3.0.3
C:\Users\pepe> set PATH=%PATH%;%M2_HOME%\bin

* Prueba de la Instalación
C:\Users\pepe> mvn -v
* Global setting: $M2_HOME/conf/settings.xml
* User setting: {user.home}/.m2/settings.xml
* Local reposiory: {user.home}/.m2/repository/
External External
Server Server
….…

Nexus Server

Developer Developer Developer Developer


<settings xmlns=http://maven.apache.org/SETTINGS/1.0.0
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://maven.apache.org/SETTINGS
1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
* Project Object Model (POM) * Dependencias
*  Componentes del POM *  Alcance de las Dependencias (Scope)
*  Super POM *  Dependencias Opcionales
*  POM Simple, Efectivo *  Rangos de Versiones
* Coordenadas de un Proyecto *  Dependencias Transitivas
*  GAV (Grupo, Artefacto, Versión) *  Revisar o Visualizar Dependencias
*  Versiones de un Proyecto *  Conflictos entre Dependencias
*  Versiones Snapshot *  Exclusión de Dependencias Transitivas
* Referencia a Propiedades * Herencia de POM
*  Variables *  Que es herencia de POM
*  Variables del POM *  Comportamiento Heredado
*  Propiedades de settings.xml * Proyectos Multi-módulos
*  Propiedades del Sistema Java *  Estructura de Directorios
*  Variables de Ambiente *  Contenedor de Proyectos
*  Propiedades Definidas por el Usuario *  Ejemplo de Multi-módulo
El POM más simple que se puede hacer producirá:
* Un proyecto con los fuentes en src/main/java!
* Además la carpeta src/main/test para ejecutar
test con JUnit
* Un jar cuyo nombre será simple-project-1.jar!
* El sitio del proyecto generado mediante mvn site

Pom efectivo:
mvn help:effective-pom!
Crear un proyecto Maven:

mvn archetype:generate !
-DgroupId=co.com.premize.maven.simple !
-DartifactId=simple !
-Dpackage=co.com.premize.maven !
-Dversion=1.0.0-SNAPSHOT!
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>co.com.premize.maven</groupId>
<artifactId>maven-ejemplo</artifactId>
<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>
<major version>.<minor version>.<incremental>-<qualifier>
!

Ejemplos
1.2.3-GA
3.5.6-Final
1.2.3-SNAPSHOT (versión especial)

!
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>sibling-project</artifactId>
<version>${project.version}</version>
</dependency>

<build>
<finalName>${project.baseUri}-${project.artifactId}</finalName>
</build>

<properties>
<maven.test.failure.ignore>true</maven.test.failure.ignore>
<spring.framework.version>3.1.0.M1</spring.framework.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.framework.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.framework.version}</version>
</dependency>
Maven controla que librerías son
necesarias en el classpath mediante
scopes:
* Compile
* Test
* Runtime
* Provided
* System
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>1.4.1</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>swarmcache</groupId>
<artifactId>swarmcache</artifactId>
<version>1.0RC2</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>junit</groupId> V >= 3.8
<artifactId>junit</artifactId> &&
<version>[3.8, 4.0)</version>
V < 4.0
<scope>test</scope>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
V < 3.8.1
<version>[, 3.8.1]</version>
<scope>test</scope>
</dependency>
Proyecto-
A

Proyecto-
B

Proyecto-
C

Proyecto-
D
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.5.ga</version>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>
<dependencies>
</dependencyManagement>

Luego en un proyecto hijo, solo es necesario colocar:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<project>
<parent>
<groupId>com.training.killerapp</groupId>
<artifactId>a-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project-a</artifactId>
...
<modules>
<module>book-examples</module>
<module>book-chapters</module>
</modules>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>co.com.mp.cni</groupId>
<artifactId>cni-main-pom</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<name>Reactor Principal</name>
<modules>
<module>../cni-model</module>
<module>../cni-servicios</module>
<module>../cni-spring-config</module>
...
</modules>
</project>
Crear cuatro proyectos: groupId: co.com.premize.[nombre_usuario]
1.  Simple-api: artifactId: simple-api
2.  Simple-services
3.  Simple-client
4.  Simple-parent
5.  Simple-reactor
* En el primer proyecto crear la interface ProveedoresService, y la entidad Proveedor.
En la interfaces definir métodos del estilo CRUD.
* En el segundo proyecto crear la implementación de la interface ProveedoresService.
Hacer un test unitario que permita probar el método findById y findAll.
* El servicio que devuelva mocks, dummies. Este proyecto debe depender de las
librerías de hibernate para JPA.
* El proyecto 4 debe definir el padre de los demás proyectos. El mismo debe contener
una propiedad para especificar la versión de las librerías de hibernate a utilizar:
<hbm.version>3.6.3.Final</hbm.version>
* El quinto proyecto debe ser un multi-modulo y debe contener a los proyectos 1, 2, 3
y 4.
* El Ciclo de Vida de Construcción * Configuración de Plugins
* Introducción * Descripción de Parámetros de
* Principales fases del Ciclo de Vida Configuración de Plugins
* Ciclos de Vida Específicos para * Configuración de Parámetros
Empaquetamiento * Integración con IDE de desarrollo
* Objetivos (Goals) Comunes * Introducción a m2eclipse
* Construcción de proyectos a * Instalación
medida * Crear o Bajar Proyectos Maven
* Perfiles de Construcción * Ejecutar Comandos Maven
* Configuración de Proyectos con * Utilizando m2eclipse
Perfiles
* Activación de Perfil * Analizar Dependencias
* Generación del Sitio y Reportes * Verificar Información del POM
* Ver y Manipular Repositorios
* El ciclo de vida es la secuencia
organizada de fases que existen
para ejecutar un conjunto de
objetivos (goals).
* Una fase es un paso en el ciclo de
construcción de un proyecto que
puede tener cero o mas goals
relacionados.
* Un goal (objetivo) es la operación
que realmente se realiza sobre un
proyecto por ejemplo crear un jar
o un war.
* Un plugin es una colección de
goals.
mvn clean invoca el ciclo clean el cual tiene definido tres
fases:
* pre-clean!
* clean!
* post-clean!
La fase más importante es clean que posee enlazado el goal
clean:clean el cual está implementado en el plugin Clean
(maven-clean-plugin-2.x.jar).
* Este ciclo de vida es un modelo general de un
proceso de construcción para aplicaciones de
software. La primera fase es validate y la
última es deploy.

Esta compuesto por las siguientes fases: validate,


generate-sources, process-sources, generate-
resources, process-resources, compile, process-
classes, generate-test-sources, process-test-
sources, generate-test-resources, process-test-
resources, test-compile, test, prepare-package,
package, pre-integration-test, integration-test,
post-integration-test, verify, install, deploy!
mvn site genera la documentación y el sitio web del proyecto.
Este ciclo de vida contiene cuatro fases:
* pre-site!
* site!
* post-site!
* site-deploy!
El goal por defecto de este ciclo de vida es site:site y
site:deploy.
* Dependiendo del packaging del proyecto, cada
tipo tiene su propio conjunto de goals.

* Los ciclos de vida que dependen de la configuración del


POM son:
" Jar
" War
" Pom
" Maven Plugin
" Ear
" Ejb
Dentro de los goals comunes tenemos:
* Process Resources
* Compile
* Process Test Resources
* Test Compile
* Test
* Install
* Deploy
* Check that there are no uncommitted changes in the sources
* Check that there are no SNAPSHOT dependencies
* Change the version in the POMs from x-SNAPSHOT to a new
version (you will be prompted for the versions to use)
* Transform the SCM information in the POM to include the
final destination of the tag
* Run the project tests against the modified POMs to confirm
everything is in working order
* Commit the modified POMs
* Tag the code in the SCM with a version name (this will be
prompted for)
* Bump the version in the POMs to a new value y-SNAPSHOT
(these values will also be prompted for)
* Commit the modified POMs
mvn release:prepare
* Checkout from an SCM URL with optional tag
* Run the predefined Maven goals to release
the project (by default, deploy site-deploy)

mvn release:perform
* Para que son útiles?
* Que es la portabilidad de una aplicación?
* Aplicaciones no portables
* Ambientes portables
* Portabilidad a través de Perfiles en Maven
<profiles>
<profile>
<build>
<defaultGoal>...</defaultGoal>
<finalName>...</finalName>
<resources>...</resources>
<testResources>...</testResources>
<plugins>...</plugins>
</build>
<reporting>...</reporting>
<modules>...</modules>
<dependencies>...</dependencies>
<dependencyManagement>...</dependencyManagement>
<distributionManagement>...</distributionManagement>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<properties>...</properties>
</profile>
</profiles>
* Que son los perfiles de activación?
* Como se configuran?
* Como se activa un perfil cuando ejecutamos
un goal?
* Protección de datos sensibles en los perfiles
* Ejemplo de Activación de Perfiles
* Un perfil se puede activar de varias maneras:
http://maven.apache.org/guides/introduction/introduction-to-profiles.html

# Explicitly: mvn install -P profile-1,profile-2


# Through Maven settings
# Based on environment variables
# OS settings
# Present or missing files
Como listar los perfiles activos:
mvn help:active-profiles
* Generar el sitio: mvn site!
* Desplegarlo localmente: mvn site:run!
* Personalizar el sitio
* Cambiar el header
* Cambiar el menu
* Cambiar el estilo .css
* Generación de Reportes
* Estructura de Directorio
* Documentación
* Despliegue remoto mvn site:deploy!
* Descripción de Parámetros de Configuración de
Plugins
mvn help:describe -Dcmd=compiler:compile –Ddetail!
!
* Configuración de Parámetros
<plugin>!
<groupId>org.apache.maven.plugins</groupId>!
<artifactId>maven-compiler-plugin</artifactId>!
<configuration>!
<source>1.5</source>!
<target>1.5</target>!
</configuration>!
</plugin>!
m2eclipse provee integración de Maven para Eclipse.
* Creación y importación de proyectos Maven
* Administración de Dependencia
* Descarga y actualización automática de dependencias
* Creación de proyectos mediante arquetipos Maven
* Búsquedas en repositorios Maven remotos
* Administración de POM
* Materialización de proyectos a partir de un POM
* Checking out de Proyectos Maven desde repositorios SCM
* Integración con Web Tools Project (wtp)
* Integración con Subclipse
* Integración con Mylyn
* Editor de POM basado en formulario
* Visualización Grafica del grafo de dependencias
* Presentación grafica del árbol de dependencias y de dependencias resultas
" Instalación m2eclipse
" Creación de proyectos
" Bajar del SVN proyectos Maven
" Creación de proyectos con arquetipos Maven
" Creación de un archivo POM
" Importar un proyecto Maven
" Ejecutando Maven
" Trabajar con repositorios
" Navegar los repositorios
" Análisis de dependencias en m2eclipse
" Editor de POM

También podría gustarte