Curso de Introduccion Maven
Curso de Introduccion Maven
Maven 2
El Origen de MAVEN
mvn archetype:create -DgroupId=tutorial
-DartifactId=tutorial -DarchetypeGroupId=org.
apache.struts -DarchetypeArtifactId=struts2-
archetype-starter -DarchetypeVersion=2.0.2-
SNAPSHOT
Estructura de un Proyecto
Maven define una estructura de carpetas
por defecto para todos los elementos que
componenen un desarrollo. Esta estructura puede
ser modificada en el pom.xml.
➢ src/main/java: Código Fuente
pruebas.
➢ site: Carpeta con información para generar una
resultados.
Gestión Declarativa.
En maven un proyecto se define a partir de su
fichero pom.xml. Este fichero se encuentra
siempre en la raiz del proyecto y contienen toda
información necesaria para el ciclo de vida del
proyecto: dependencias, plugins, repositorios
de donde obtener estos, configuración de los
informes.
Listas de correo.
proyecto.
Repositorio de código con el que se trabaja.
etc.
Informes de Métrica
En la parte de 'informes del proyecto' podemos
destacar:
El test de cobertura
CPD
PMD
Xref (Informe de referencias cruzadas).
Informe sobre tags.
Documentación del javadoc.
Resultado de los test de junit.
Checkstyle.
Configurar un Plugin
Para modificar la configuración por defecto de los
plugins usamos la etiqueta <configuration>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<locales>es_ES</locales>
<encoding>UTF-8</encoding>
<inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding>
</configuration>
</plugin>
Configurar un Plugin
Además podemos indicar la configuración del
plugin para una fase concreta del ciclo de vida.
<executions>
<execution>
<id>it-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/*TestIt.class</include>
</includes>
</configuration>
</execution>
</executions>
SCM
El plugin SCM nos permite comunicarnos
con sistemas de control de versiones com
Subversion, CVS, Clearcase, Visual
Source Safe, etc.
<connection>
scm:svn:
http://localhost/repos/compulsa
</connection>
Su url
http://maven.apache.org/scm/plugins/
Plugin Cargo
Este plugin nnos da la posibilidad de trabajar
directamente desde Maven2 con distintos
contenedores y servidores de aplicaciones (Tomcat,
Jboss, Jetty, jo!, OC4J, Orion, Resin, Weblogic).
<build>
<!-- para filtrar los recursos y poder usar properties
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
Filtering (II)
A continuación creamos un fichero
prueba.properties en nuestra carpeta
src/main/resources:
#prueba.properties
application.name=${pom.name}
application.version=${pom.version}
#prueba.properties
application.name=Compulsa
application.version=1.0
Filtering (III)
process-resources es la fase del ciclo de vida de
construcción donde los recursos son filtrados y
copiados.
También podemos añadir a una property de nuestro
fichero un valor de otro fichero externo.
externo
Por ejemplo tomando el properties compulsa.properties
como fuente, aña dimos a lo de antes lo siguiente. Lo
suyo sería ponerlo en la carpeta de filtros y no en la de
recursos
<build>
<filters>
<filter>src/main/resources/compulsa.properties</filter
>
</filters>
....
</build>
Filtering (IV)
Si volvemos a ejecutar mvn process-resources
veremos que en target/classes hay un
prueba.properties con el siguiente contenido:
application.name=Compulsa
application.version=1.0
servidorfirmaDesarrollo=ws083.juntadeandal
ucia.es
<my.filter.value>hello</my.filter.value>
</properties>
Filtering (V)
<properties>
<my.filter.value>hello</my.filter.value>
</properties>
+- pom.xml
+- capaWeb
| +- pom.xml
+- capaNegocio
| +- pom.xml
+- capaPersistencia
| +- pom.xml
Proyecto Multi Modulo (II)
Como se puede ver en el arbol anterior la idea es
tener un pom.xml en lo que seria la carpeta del
proyecto global. Sería más o menos así:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
.......
<packaging>pom</packaging>
<modules>
<module>capaPersistencia</module>
<module>capaNegocio</module>
<module>capaWeb</module>
</modules>
</project>
Proyecto Multi Modulo (III)
A continuación añadiremos a cada pom.xml la
dependencia con los otros y la referencia al
pom.xml global. Por ejemplo en el pom.xml de la
capaWeb.
<parent>
<groupId>es.juntadeandalucia.ejemplos</gro
upId>
<artifactId>capaWeb</artifactId>
<version>1.0</version>
</parent>
Proyecto Multi Modulo (IV)
<dependency>
<groupId>com.mycompany.app</groupId>
<artifactId>capaNegocio</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.mycompany.app</groupId>
<artifactId>capaPersistencia</artifactId>
<version>1.0</version>
</dependency>
Assembly
Este plugin se usa para crear una distribución binaria
de nuestro proyecto en Maven que incluya soporte de
scripts, ficheros de configuración y dependencias en
tiempos de ejecución.
<plugin>
<artifactId>maven-assembly-
plugin</artifactId>
<configuration>
<descriptors>
<!-- Sitio en el que esta el fichero anterior
-->
<descriptor>src/main/assembly/dep.xml</descriptor>
</descriptors>
</configuration>
</plugin>
Assembly
Tambíen podemos crear un fichero dep.xml donde indicar
que cosas empaquetar dentro de un zip. Y añadimos la
configuración al pom.xml para que coja por defecto este
fichero.
<plugin>
<artifactId>maven-assembly-
plugin</artifactId>
<configuration>
<descriptors>
<!-- Sitio en el que esta el fichero anterior
-->
<descriptor>src/main/assembly/dep.xml</descriptor>
</descriptors>
</configuration>
</plugin>
Assembly
Este podría ser un ejemplo de dep.xml que nos crease un zip
con los fuentes por un lado y con el war y los jar necesarios
por otro.
<assembly>
<id>entrega</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet><!--src con los fuentes -->
<directory>src</directory>
<outputDirectory>/fuentes</outputDirectory>
</fileSet>
Assembly
<fileSet><!--pom.xml-->
<outputDirectory>/fuentes</outputDirectory>
<includes>
<include>*.xml</include>
</includes>
</fileSet>
<fileSet> <!-- war de la aplicación y jar de
dependencias -->
<directory>target</directory>
<outputDirectory>/binarios</outputDirectory>
<includes>
<include>*.jar</include>
<include>*.war</include>
</includes>
</fileSet>
Assembly
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>/binarios</outputDirectory>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
Integración con Eclipse
Para casar el uso de maven con Eclipse
emplearemos dos plugins.