• No results found

El modelo de objetos del proyecto POM (pom.xml) es la base de cómo Maven trabaja. El desarrollo y gestión del modelo está controlado desde el modelo del proyecto.

 En el pom.xml se define toda la metainformación necesaria para el proyecto (nombre del artefacto a generar, rutas fuentes, JDK de compilación, dependencias,…):

o Nombre y versión de artefacto a generar

o Dependencias:

o Versión JDK compilación:

Maven tiene un funcionamiento basado en Repositorios. Los Repositorios son Servidores (en general Servidores Web) en los que están accesibles las diferentes versiones de las librerías organizadas jerárquicamente. Ejemplo:

o Remotos: existen repositorios públicos de Maven (como

http://maven.springframework.org/release) que contienen las diferentes versiones de las librerías.

o Local: contiene una copia de la parte del Repositorio remoto necesaria para trabajar con las aplicaciones en una estructura local (en la Arquitectura en w:\SOFTWARE\Maven\M2_REPO\)

Los Repositorios remotos que se usan en una aplicación se definen en el pom.xml del proyecto. A la hora de realizar una tarea sobre un proyecto (compilar, ejecutar tests,…) se busca en estos repositorios de forma secuencial.

 Al realizar una tarea de Maven (mvn install por ejemplo) se descargan al repositorio local las dependencias necesarias desde los repositorios remotos para funcionar. Ejemplo:

Estructura estándar de todos los proyectos, por ejemplo, para una estructura de un módulo WAR, la configuración sería:

Está listo para ser utilizado en red. Uso de repositorios centrales de librerías, utilizando un mecanismo que permite descargar automáticamente aquellas necesarias en el proyecto, lo que permite a los usuarios de Maven reutilizar librerías entre proyectos y facilita la comunicación entre proyectos para asegurar que la compatibilidad entre distintas versiones es correctamente tratada.

 Maven provee soporte no sólo para obtener archivos de su repositorio, sino también para subir artefactos al repositorio al final de la construcción de la aplicación, dejándola

al acceso de todos los usuarios. Una caché local de artefactos actúa como la primera fuente para sincronizar la salida de los proyectos a un sistema local.

 Maven está construido usando una arquitectura basada en plugins que permite que utilice cualquier aplicación controlable a través de la entrada estándar. En teoría, esto podría permitir a cualquiera escribir plugins para su interfaz con herramientas como compiladores, herramientas de pruebas unitarias, etcétera, para cualquier otro lenguaje

6.2.4 Ejemplo de uso

Vamos a crear un proyecto Java, compilarlo, chequearlo, empaquetarlo y subirlo al repositorio. Dicho proyecto va a ser creado con el siguiente arquetipo en la línea de comandos:

mvn archetype:generate

DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app

Éste es un comando interactivo, por lo que Maven nos pedirá cierta información antes de crear la estructura del proyecto. A continuación se muestran las trazas generadas:

... Choose a number: 112: 112 Choose version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 6: 1.1 Choose a number: 6: 6

[INFO] Using property: groupId = com.mycompany.app [INFO] Using property: artifactId = my-app

Define value for property 'version': 1.0-SNAPSHOT: [INFO] Using property: package = com.mycompany.app Confirm properties configuration:

groupId: com.mycompany.app artifactId: my-app version: 1.0-SNAPSHOT package: com.mycompany.app Y: Y [INFO] --- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1

[INFO] --- [INFO] Parameter: groupId, Value: com.mycompany.app

[INFO] Parameter: packageName, Value: com.mycompany.app [INFO] Parameter: package, Value: com.mycompany.app [INFO] Parameter: artifactId, Value: my-app

[INFO] Parameter: basedir, Value: W:\DESARROLLO\prueba [INFO] Parameter: version, Value: 1.0-SNAPSHOT

[INFO] ********************* End of debug info from resources from generated POM ***********************

[INFO] project created from Old (1.x) Archetype in dir: W:\DESARROLLO\MavenDemo\my-app [INFO] ---

[INFO] BUILD SUCCESSFUL

[INFO] --- [INFO] Total time: 1 minute 46 seconds

[INFO] Finished at: Wed Jul 27 10:33:36 CEST 2011 [INFO] Final Memory: 11M/28M

[INFO] ---

Maven habrá creado un directorio my-app, y este directorio contendrá un fichero pom.xml:

pom.xml <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> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>my-app</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>

La estructura de ficheros generada será la siguiente:

my-app |-- pom.xml `-- src |-- main | `-- java | `-- com | `-- mycompany | `-- app | `-- App.java `-- test `-- java `-- com `-- mycompany `-- app `-- AppTest.java

En la cual se nos habrán generado dos clases:

 Una principal: App.java

 Una de prueba de JUnit: AppTest.java

Una vez que se hayan modificado las clases (en este caso maven ha creado un ejemplo básico, por lo que no es necesario modificar el código), se pueden compilar y ejecutar las pruebas con el siguiente comando desde el directorio my-app que ha creado:

mvn test-compile

Y posteriormente empaquetarlo en un jar y subirlo al repositorio:

mvn package mvn install

El comando “mvn install” instala el artefacto creado en el repositorio local de la máquina. El comando copia tanto el jar como el pom a nuestro repositorio.

Al instalar el artefacto en el repositorio local, este proyecto está disponible para incluirlo como dependencia en otro proyecto maven, mejorando así la portabilidad y modularidad de los proyectos creados.

Related documents