Maven en detalle – Parte 2

24 Abril 2009 por Juan Eladio Sánchez Rosas Deja una respuesta »

Continuando con nuestro artículo anterior analizaremos la estructura del proyecto y el POM, base de todo proyecto Maven.

La estructura del Proyecto

Dependiendo del tipo de proyecto se pueden tener diferentes estructuras, sin embargo las estructuras más conocidas son la JAR y la WAR.

Veamos la estructura de una aplicación JAR:

Veamos la estructura de una aplicación WAR:

Como puede verse las estructuras son parecidas con la diferencia que la estructura WAR tiene la sección webapp donde irán todos los files jsp, xhtml, html, etc.

En el directorio resources van files de configuración así como el messages.properties.

El POM (Project Object Model)

El POM file es el archivo XML de configuración de cualquier proyecto Maven, en él podemos encontrar información sobre la versión y las dependencias del proyecto así como cualquier otra configuración personalizada para ese proyecto.

El contenido del POM generado después de ejecutar el comando lo podemos ver a continuación:

<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.antartec.app</groupId>
   <artifactId>my-test</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>Maven Quick Start Archetype</name>
   <url>http://maven.apache.org</url>
   <dependencies>
      <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>3.8.1</version>
           <scope>test</scope>
      </dependency>
   </dependencies>
</project>

Veamos los tags más importantes:

<groupId> El id del grupo al que pertenece el proyecto.
<artifactId> El id del artifact o proyecto (en la mayoría de los casos el nombre del proyecto).
<version> La versión del artifact en el grupo especificado.
<dependency> Aquí se colocarán todas las dependencias del proyecto.

El POM requiere que estos valores estén definidos ya que ésta es la manera en que Maven los identifica dentro de su repositorio.

Ej. groupId:artifactId:version com.antartec.app:my-test:1.0-SNAPSHOT

Si no se especifica algunos de los tags (packaging,  name,  url) maven usan los valores por defecto heredados del super POM del cual heredan todos los proyectos (hablaremos sobre la herencia más adelante).

Construyamos el proyecto

Ejecutando el siguiente comando se construye el proyecto:

mvn clean install

A diferencia del comando archetype:create este comando es de una sola palabra que especifica la fase que debe ejecutarse. Una fase corresponde a un paso del ciclo de vida de maven. Por ejemplo

mvn compile

Ejecutará las siguientes fases:

validate
generate-sources
process-sources
generate-resources
process-resources
compile

Existe muchas fases en Maven sin embargo listo las más utilizadas a continuación:

  • validate – valida que el proyecto es correcto y tiene toda la información necesaria.
  • compile – compila el código fuente.
  • test – compila el código y ejecuta los unit test correspondientes. Sin embargo no es requisito para que el proyecto sea desplegado.
  • package – toma el código compilado y lo empaqueta en un formato distribuible como JAR o WAR.
  • integration-test – Despliega el proyecto si es necesario en ambiente de pruebas donde se puedan correr pruebas de integración.
  • verify – ejecuta cualquier verificación para cumplir los parámetros de calidad.
  • install – instala el jar o war en el repositorio local para que otras aplicaciones locales la puedan usar.
  • deploy – copia el jar o war a un repositorio remoto para que pueda ser usado por otro desarrollador o proyecto.

Si desean ver la lista completa de fase las pueden encontrar en lifecycle

Para un desarrollo local bastará con utilizar mvn clean install.

En nuestra siguiente entrega hablaremos sobre el manejo de las dependencias y como usar el proyecto junto con nuestro IDE favorito.

Related posts:

  1. Maven en detalle – Parte 1

5 comentarios

  1. Jose Luis dice:

    Hola Giancarlo el articulo es muy interesante y ya había seguido el post anterior, a modo de comentario seria bueno si usaras algun resaltador de sintaxis para los xml o sentencias actualmente uso este:
    http://alexgorbatchev.com/wiki/SyntaxHighlighter

    Saludos.

  2. gian.corzo dice:

    Gracias Jose Luis,

    Gracias a tu sugerencia hemos actualizado nuestro blog con un sistema para resaltar código fuente, dado que usamos wordpress hemos preferido instalar el módulo Geshi.

  3. Esteban dice:

    Hola,

    Tengo un problema cuando quiero instalar un artefacto en un repositorio local dentro de mi empresa, para este estoy utilizando Nexus como manejador de repositorios maven, al cual ya me estoy conectando pero cuando quiero instalar un artefacto en este repositorio me manda el sig error, espero me puedan ayudar.

    INFO] Using mirror: AsteciRepository for repository: central
    (mirror url: http://ubuntu-server:8081/nexus/content/groups/public)
    [INFO] Using mirror: AsteciRepository for repository: apache.snapshots
    (mirror url: http://ubuntu-server:8081/nexus/content/groups/public)
    [ERROR]

    Maven cannot calculate your build plan, given the following information:

    Tasks:
    - install

    Current project:
    Group-Id: com.asteci.services
    Artifact-Id: services-common
    Version: 1.0.0
    From file: C:\Users\asteci04\Steven\WorkSpaces\wseg\wsSVNMaven\services-common\pom.xml

    Error message: Failed to resolve plugin for mojo binding: org.apache.maven.plugins:maven-surefire-plugin:2.4.2:test
    Root error message: Missing:
    ———-

  4. Giancarlo Corzo dice:

    lo más probable es que tu instalación de Nexus no pueda acceder a Maven Central (http://repo1.maven.org/maven2), debido o a que no pertenezca al grupo que veo configurado en tu comentario (http://ubuntu-server:8081/nexus/content/groups/public), o si has seguido el ejemplo de la documentación de Nexus para configurar el .m2/settings.xml:

    nexus
    *
    http://ubuntu-server:8081/nexus/content/groups/public

    solo podrás acceder a los repositorios (sean host o proxy) que pertenezcan al grupo.

    Revisa tu configuración de Nexus dado que el repositorio Maven central, Apache snapshots, codehouse por defecto

Trackbacks /
Pingbacks

  1. Maven en detalle - Parte 3

Deja un comentario