Creacion y compilado de un proyecto maven

De ChuWiki
Saltar a: navegación, buscar

Viene de Tutorial de Maven

Creación de un proyecto

Una vez instalado maven, vamos a crear un proyecto java de escritorio. Desde una ventana de comandos nos vamos al directorio donde queramos crear nuestro proyecto y ejecutamos el comando obsoleto mvn archetype:create, con los siguientes parámetros

mvn archetype:create -DgroupId=com.chuidiang -DartifactId=proyecto1 -Dpackaging=jar

El significado de los parámetros es el siguiente:

  • groupId es un identificador para agrupar varios proyectos que estén relacionados. Habitualmente suele ser el paquete inicial que queremos para todas nuestras clases en todos nuestros proyecto o grupos de proyectos. Yo suelo poner com.chuidiang.
  • artifactId es el nombre del proyecto y será también el nombre del jar que se genere.
  • packaging es de alguna forma el tipo de proyecto que queremos generar. Poniendo jar se creará un proyecto que genere un jar, es decir, una librería o aplicación de escritorio. Podemos poner war, ear, etc.

Si todo va bien, después de una serie de información de la ejecución del comando, obtendremos el mensaje BUILD SUCCESSFULL y se creará un directorio proyecto1 con la siguiente estructura

proyecto1
proyecto1/pom.xml
proyecto1/src
proyecto1/src/main
proyecto1/src/main/java
proyecto1/src/main/java/com
proyecto1/src/main/java/com/chuidiang
proyecto1/src/main/java/com/chuidiang/App.java
proyecto1/src/test
proyecto1/src/test/java
proyecto1/src/test/java/com
proyecto1/src/test/java/com/chuidiang
proyecto1/src/test/java/com/chuidiang/AppTest.java

Vemos que ha creado un directorio src/main/java para los fuentes, con un App.java que sólo tiene un "Hola Mundo". El paquete para esta clase es el que pusimos en el groupId (com.chuidiang). También ha creado un directorio src/main/test para los test de JUnit (o la herramienta que sea). En él ha creado un test de ejemplo AppTest.java.

Es importante el fichero pom.xml que ha creado justo en el directorio del proyecto. Este fichero pom.xml es en el que pondemos información y dependencias de nuestro proyecto. Tal cual lo ha creado es correcto, pero deberemos editarlo e ir poniendo cosas según nos haga falta o para ponerlo a nuestro gusto.

Compilar el proyecto

De momento no vamos a tocar nada. Vamos simplemente a compilarlo para ver cómo se hace. Nos vamos dentro del directorio proyecto1 y tenemos dos comandos maven disponibles según lo que queramos hacer.

  • mvn compile compila las clases y genera los .class. Al hacerlo, creará un directorio target debajo del proyecto1, debajo de él un directorio classes y ahí irá metiendo los .class que genere.
  • mvn package compila las clases si no están ya compiladas y genera en el directorio target el fichero .jar de nuestro proyecto.

No es necesario ejecutarlos en orden, si ejecutamos directamente mvn package, veremos como se van compilando las clases y se genera el jar, que quedará en el directorio target. Después de ejecutar ese comando, tendremos la siguiente estructura de directorios

proyecto1
proyecto1/pom.xml
proyecto1/src
proyecto1/src/main
proyecto1/src/main/java
proyecto1/src/main/java/com
proyecto1/src/main/java/com/chuidiang
proyecto1/src/main/java/com/chuidiang/App.java
proyecto1/src/test
proyecto1/src/test/java
proyecto1/src/test/java/com
proyecto1/src/test/java/com/chuidiang
proyecto1/src/test/java/com/chuidiang/AppTest.java
proyecto1/target
proyecto1/target/classes
proyecto1/target/classes/com
proyecto1/target/classes/com/chuidiang
proyecto1/target/classes/com/chuidiang/App.class
proyecto1/target/maven-archiver
proyecto1/target/maven-archiver/pom.properties
proyecto1/target/proyecto1-1.0-SNAPSHOT.jar
proyecto1/target/surefire-reports
proyecto1/target/surefire-reports/com.chuidiang.AppTest.txt
proyecto1/target/surefire-reports/TEST-com.chuidiang.AppTest.xml
proyecto1/target/test-classes
proyecto1/target/test-classes/com
proyecto1/target/test-classes/com/chuidiang
proyecto1/target/test-classes/com/chuidiang/AppTest.class

Vemos que se ha generado un directorio target en el que se han metido los .class, los resultados de los test de JUnit debajo del subdirectorio surefire-reposts y el jar de nuestro proyecto. Hemos destacado en negrita dicho jar. Además de ponerle proyecto1 en el nombre, le ha añadido el número de versión 1.0-SNAPSHOT. La parte SNAPSHOT para maven significa que es un proyecto todavía en desarrollo y que esta versión no es definitiva. Más adelante veremos que maven trata de forma especial los jar cuyas versiones terminen en SNAPSHOT.

Finalmente, el comando mvn clean borraría el directorio target con todo su contenido. Se suele ejecutar si queremos compilar todo desde cero. Si no lo ejecutamos, maven mirará si los .java son más modernos que los .class existentes para compilar sólo los que han sufrido modificaciones.

Crear otro tipo de proyectos

He comantado que mvn archetype:create es un comando obsoleto. Maven aconseja ahora ejecutar mvn archetype:generate. Si lo ejecutamos sin parámetros, nos ira preguntado un montón de cosas:

  • Primero el tipo de proyecto a generar, entre 41 posibles: proyectos appfuse, hibernate, spring, cocoon, groovy, etc, etc, (por defecto, un jar simple)
  • groupId
  • artifactId
  • version (por defecto 1.0-SNAPSHOT)
  • paquete inicial de las clases (por defecto lo que hemos puesto en groupId)
  • Confirmación de los datos introducidos para crear el proyecto.

Según qué tipo de proyecto, maven creará la estructura de una forma u otra, generará determinados ficheros de ejemplo en determinados directorios (como en el caso del App.java con un "Hola Mundo" como acabamos de ver) y lo más importante de todo, nos bajará de internet todos los jar de los que dependemos y los colocará en un sitio en que él pueda encontrarlos cuando compile (veremos más adelante cómo y dónde).