You are on page 1of 152

MAVEN

¿ Qué es Maven ?
Descarga e instalación
Proyecto Simple
Core Conceptos
Crear un proyecto Pom . (Proyecto Multimodulo)
Proyecto hijos y dependencias entre ellos (war-jar)
Crear un proyecto Jar
Crear un proyecto War
Repositorio local
Scope de las dependencias
Plugins
Eclipse y Maven
Ejemplo Comentados
Perfiles y filtros
Configuracion de Plugin
Información adicional en proyectos
Dependencias entre proyectos. ( Capa Web-Capa Negocio-Capa Persistencia)
Optimizando Proyectos
Artículos Técnicos
MAVEN

¿ Qué es Maven ?
MAVEN

Herramienta Open Source para


administrar el ciclo de vida de un
proyecto.
MAVEN vs Ant
MAVEN vs Ant
MAVEN.
LINKS FUNDAMENTALES

http://books.sonatype.com

http://maven.apache.org/download.cgi

http://maven.apache.org
MAVEN vs Ant

INSTALACION MAVEN
MAVEN

http://maven.apache.org/download.cgi
MAVEN


Variable JAVA_HOME: Apuntando a nuestra instalación del jdk.
C:\Archivos de Programa\Java\jdk_1_x


PATH ruta a la carpeta bin: C:\mi_directorio\maven-3.2.1\bin
Comprobando la versión de
MAVEN Maven
mvn -version
MAVEN

ARTECHYPES
MAVEN
http://maven.apache.org/guides/introduction/introduction-to-archetypes.html

MAVEN
MAVEN

COMANDO PARA COMPROBAR LOS ARCHETYPE


MAVEN

Generando un proyecto Sencillo


GENERAR EL PROYECTO DESDE CONSOLA
MAVEN

CONCEPTOS
MAVEN
groupId. Es el grupo de proyectos
Archetype
artifactId. Es un proyecto concreto

DgroupId

DartifactId
MAVEN

Las coordenadas del proyecto


MAVEN
CARPETA GENERADA
MAVEN
EL ARCHIVO POM
Instalamos el proyecto
La carpeta Repository
http://search.maven.org/#browse https://repository.sonatype.org/

https://mvnrepository.com
MAVEN.
DIRECTORIOS ÉSTANDAR
MAVEN.
+ CONCEPTOs
MAVEN
CICLO VIDA DEL PROYECTO
MAVEN
CICLO DE VIDA DEL PROYECTO
MAVEN
MAVEN

UN PROYECTO POM
MAVEN

Crear un proyecto
MAVEN
PROYECTO PADRE ( TIPO POM ).
Cambiando el packagin
MAVEN
PROYECTO JAR
MAVEN
PROYECTO JAR
MAVEN
EL POM DEL PROYECTO PRINCIPAL
MAVEN
EL POM DEL PROYECTO HIJO
MAVEN
EL BINARIO DEL PROYECTO

mvn install
MAVEN
MAVEN
PROYECTO WAR

mvn archetype:create -DgroupId=org.mavenindra -DartifactId=tutorial_maven_webapp


-Dversion=1.0 -DarchetypeArtifactId=maven-archetype-webapp
MAVEN
EL POM DEL PROYECTO PADRE
POM DEL PROYECTO WAR

MAVEN
MAVEN.
+ CONCEPTOs
MAVEN.
Dependencias
http://search.maven.org/#browse https://repository.sonatype.org/

https://mvnrepository.com
MAVEN.
Practicando
MAVEN
ECLIPSE Y MAVEN
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>

Pom.xml proyecto tutorial_maven_jar


Agregando una dependencia:

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.9</version>
</dependency>

Pom.xml proyecto tutorial_maven_jar


NUESTRO WAR ES DEPENDIENTE!!
MAVEN
SCOPE DE LAS DEPENDENCIAS
MAVEN
MAVEN
LA CARPETA TARGET

Compilamos el proyecto -> mvn install


Se genera la carpeta target en nuestro proyecto.
MAVEN
CARPETA GENERADA
MAVEN
DEPENDENCIAS TRANSITIVAS
MAVEN
PRIMERA SOLUCIÓN
MAVEN
MAVEN
MAVEN
MAVEN
PUGLINS EN MAVEN

http://maven.apache.org/plugins/index.html
MAVEN
EL PLUGIN ASSEMBLY
MAVEN
EL PLUGIN ASSEMBLY
MAVEN.
Configurando un plugin
<assembly>
<id>bin</id>
<formats>
<!-- Formatos en el que queremos el zip -->
<format>tar.gz</format>
<format>tar.bz2</format>
<format>zip</format>
</formats>
<!-- Ahora que cosas queremos -->
<fileSets>
<!-- Nuestros ficheros de configuracion guardados en src/main/config-->
<fileSet>
<directory>src/main/config</directory>
<!-- Queremos que esten en un subdirectorio CONFIG dentro del zip -->
<outputDirectory>/CONFIG</outputDirectory>
</fileSet>
<fileSet>
<!-- Queremos los jar generados en target se incluyan en el directorio Jar dentro del zip -->
<directory>target</directory>
<outputDirectory>/Jar</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<!-- Queremos incluir los jar de los que dependemos -->
<dependencySets>
<dependencySet>
<!-- Queremos los jar dentro de un directorio Jar dentro del zip -->
<outputDirectory>/Jar</outputDirectory>
<!-- Que añada todo lo necesario para la ejecución -->
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
<build>
<finalName>tutorial_maven_webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>9090</port>
</connector>
</connectors>
</configuration>
</plugin>
</plugins>
</build>

Pd. Archivo POM.xml de tutorial_maven_war. Plugin Jetty

mvn jetty:run
MAVEN
mvn pdf:pdf
MAVEN
JAVADOC
MAVEN
JAVADOC
MAVEN
SITE DEL PROYECTO
MAVEN
mvn:test
MAVEN
PROYECTO CH-CUSTOM
El proyecto ch-custom

mvn archetype:generate -DgroupId=org.sonatype.mavenbook.custom \


-DartifactId=simple-weather \
-Dpackage=org.sonatype.mavenbook \
-Dversion=1.0
MAVEN
EL PROYECTO ch-custom
MAVEN
CODIGO DEL PROYECTO

El código del proyecto


MAVEN
RECURSOS DEL PROYECTO

Aquí debemos guardar los recursos


Del proyecto
MAVEN
mvn:exec

Lo ejecutamos con el plugin Exec:

mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main

Pasamos párametros al plugin Exec

mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main -Dexec.args="70112"


RESOLVIENDO DEPENDENCIAS

Viendo las dependencias del proyecto

mvn dependency:resolve
mvn dependency:tree

Buscando ayuda
mvn help:describe -Dplugin=exec -Dfull

Maven en modo depuración

mvn install -X
TEST DE UNIDAD

mvn:test
TEST DE UNIDAD

mvn:test
TEST DE UNIDAD

Con esta opción ignoramos los fallos


En las pruebas de Unitarias de Test
SureFire
Plugin assembly

mvn install assembly:assembly


MAVEN
PROYECTO SIMPLE-WEB
MAVEN
PROYECTO SIMPLE-WEB

mvn archetype:generate -DgroupId=org.sonatype.mavenbook.simpleweb \


-DartifactId=simple-webapp \
-Dpackage=org.sonatype.mavenbook \
-Dversion=1.0-SNAPSHOT
PROYECTO SIMPLE-WEB

En esta carpeta se guardaría nuestro war


PLUGIN JETTY

Jetty es un plugin que nos permite con ese sólo comando lanzar nuestra
Aplicación.
Hace actualizaciones en caliente

mvn jetty:run Con este goal hacemos correr en plugi jetty


PROYECTO SIMPLE-WEB

El archivo web.xml
PROYECTO SIMPLE-WEB

Declaramos aquí las


dependencias J2EE
PROYECTO MULTI-MODULO

Otros módulos del proyecto


PROYECTO MULTIMODULO

El Pom del Proyecto


PROYECTO MULTIMODULO

Los elementos de este POM se heredan


PROYECTO MULTIMODULO
Hacemos uso de clases entre
distintos proyectos
PROYECTO MULTIMODULO
PROYECTO MULTIMODULO
PROYECTO MULTIMODULO

mvn clean: install


PROYECTO JEE
PROYECTO JEE

En este proyecto vamos a observar un proyecto Maven multi-módulo que producirá dos
aplicaciones: una herramienta de consulta de línea de comandos para los datos de Yahoo! y una
aplicación web que consulta el feed Clima Yahoo!.

Ambas aplicaciones almacenan los resultados de las consultas en una base de datos integrada.
Cada uno de ellos permitirá al usuario recuperar datos meteorológicos históricos de esta base
de datos integrada. Ambas aplicaciones reutilizarán lógica de la aplicación y comparten una
biblioteca de persistencia.

Este proyecto se divide en cinco submódulos que se muestran en la Figura 7.1, "multi-módulo
Enterprise Application Module Relaciones".
PROYECTO JEE
PROYECTO JEE

El proyecto tiene 5 Clases


Una biblioteca de persisentencia con 2 clases de Servicio
Una biblioteca de analisis meteorologico
Utiliza Spring e Hibernate
SIMPLE-PARENT

POM.XML
SIMPLE-MODEL

Define el modelo de objetos.


Buena practica.Separar el modelo de datos
SIMPLE-MODEL

POM.XML
SIMPLE-MODEL

POM.XML El objeto tiempo anotado


Es un simple JavaBeans
SIMPLE-WEATHER

Contiene la lógica de negocio que interactua


con sistemas externos
Recupera los datos del tiempo de Yahoo
Tiene un componente WeatherService
En el POM se gestionan las dependencias
Para el análisis sintáctico por xml de los datos
Otros módulos pueden comunicarse llamando
A los métodos de WeatherService
Contiene un archivo applicationContext
SIMPLE-WEATHER

Nuestra aplicación web utiliza un controlador


de Spring MVC que se asocia a una instancia
de WeatherService

y nuestra utilidad de línea de comando carga


el WeatherService de un ApplicationContext
en una función estática main ().
SIMPLE-WEATHER

Para fomentar la reutilización, hemos incluido


un archivo applicationContext-weather.xml
en src / main / resources,
que está disponible en la ruta de clases de un
ApplicationContext
Los módulos que dependen de esta aplicación
Pueden utilizar el ClasspathXmlApplication
Context
SIMPLE-PERSIT

Define 2 objetos de Acceso a Datos


WeatherDAO y LocationDAO
Tiene un archivo applicationContext
Para la configuración de Hibernate
También tiene un archivo de configuracion
Hibernate Config.xml
SIMPLE-PERSIT

POM.XML
SIMPLE-WEB APPLICATION MODULE

Tiene 2 controladores Spring MVC


WeatherController y simple-weather

Carga los archivos de configuracion


classpath:applicationContext-weather.xml
classpath:applicationContext-persist.xml

(web.xml)
SIMPLE-WEB APPLICATION MODULE

POM.XML
LAS CLASES CONTROLADORES
PLANTILLAS VELOCITY
EL WEB.XML

http://velocity.apache.org/engine/devel/tr
anslations/user-guide_es.html
SIMPLE-WEB APPLICATION MODULE

>/simple-parent mvn clean install

>/simple-webapp mvn hibernate3:hbm2ddl

<mvn jetty:run

http://localhost:8080/simple-webapp/weather.x?zip=60202
SIMPLE-WEB APPLICATION MODULE

Tiene 2 controladores Spring MVC


WeatherController y simple-weather
SIMPLE-WEB APPLICATION MODULE

EL POM.XML
LA CLASE MAIN
EJECUTANDO LA APLICACION
mvn hibernate3:hbm2ddl
mvn assembly:assembly
SIMPLE-WEB APPLICATION MODULE

java -cp target/simple-command-jar-withdependencies.jar \

org.sonatype.mavenbook.weather.Main 6020 2

java -cp target/simple-command-jar-with-dependencies.jar \


org.sonatype.mavenbook.weather.Main 60202 history
SIMPLE-WEB APPLICATION MODULE
OPTIMIZANDO NUESTRO POM
SIMPLE-WEB APPLICATION MODULE

<pluginManagement>
<dependencyManagement>
<properties>
SIMPLE-WEB APPLICATION MODULE

mvn dependency:analyze

Con este comando vemos que dependencias tenemos


declaradas pero no usadas o usadas pero no declaradas
SIMPLE-WEB APPLICATION MODULE
SIMPLE-WEB APPLICATION MODULE
SIMPLE-WEB APPLICATION MODULE

BUENA PRACTICA

Declarar explicitamente aquellas dependencias que se usan pero no las


Tenemos declaradas en el POM.XML
MAVEN
PERFILES EN MAVEN
MAVEN
MAVEN
MAVEN
MAVEN
MAVEN
MAVEN
MAVEN
MAVEN
MAVEN
MAVEN
MAVEN
ACTIVACION DE LOS PERFILES
MAVEN
ACTIVACION
MAVEN
ACTIVACION
MAVEN
ACTIVACION
MAVEN
ACTIVACION
MAVEN
ACTIVACION
MAVEN
ACTIVACION
MAVEN
ACTIVACION

Con variables
MAVEN
ACTIVACION
MAVEN
PROPIEDADES EN LOS PERFILES
MAVEN
ACTIVACION

POM DEL PROYECTO


MAVEN
ACTIVACION
MAVEN
CONOCER LOS PERFILES ACTIVOS
MAVEN
MAVEN

You might also like