Table of Contents

Gestión de proyectos con Maven

¿Qué es Maven?

Crear un proyecto con Maven

Añadir librerias (dependencias) a un proyecto

Para añadir una librería a un proyecto gestionado con Maven, primero tendremos que buscarla en el repositorio de la herramienta en Maven Repository. Una vez localizada la libreria y seleccionada su versión (tiene un buscador donde podéis buscar por nombre o descripción de la librería), tendremos que copiar el código XML que describe la libreria como dependencia y copiarla al fichero pom.xml de nuestro proyecto, dentro de las etiquetas <dependencies> . . . </dependencies> (Puedes ver un ejemplo aqui.

Figure 1: Búsqueda de librerías en el repositorio
Figure 2: Información sobre una versión concreta de una librería
Figure 3: XML para copiar al fichero pom.xml

Ejemplos

Fichero POM de ejemplo

Dependencias para Hibernate y el driver JDBC de MySQL

Tendremos que incluir ambas dependencias dentro de las etiquetas <dependencies></dependencies> del fichero pom.xml.

Para hibernate:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.3.7.Final</version>
</dependency>

Para MySQL:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>

Dependencia para generar javadoc

De forma similar, incluimos la dependencia para que podamos generar, utilizando Maven, la documentación javadoc de nuestro proyecto, que se creará cuando ejecutemos el goal javadoc:javadoc de Maven.

<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.0.1</version>
</dependency>

Plugin para empaquetar la aplicación y sus dependencias como un único jar ejecutable

Tendremos que añadir un plugin de maven para generar ficheros jar:

. . .
</dependencies>
<build>
  <plugins>
    . . .
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <executions>
        <execution>
          <phase>package</phase>
	  <goals>
	    <goal>single</goal>
	  </goals>
	  <configuration>
	    <archive>
	      <manifest>
                <mainClass>com.sfaci.ejemplohibernate.Aplicacion</mainClass>
              </manifest>
            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>
        </execution>
      </executions>
    </plugin>
    . . .
  </plugins>
</build>

Plugin para especificar la versión de Java con la que se debe compilar

. . .
</dependencies>
<build>
  <plugins>
    . . .
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.0</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    . . .
  </plugins>
</build>

Fichero pom.xml completo

Y a continuación un ejemplo completo de fichero pom.xml con todas las opciones que se han comentado, donde se puede ver dónde va cada una con respecto al resto del fichero.

<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.sfaci</groupId>
  <artifactId>ejemplohibernate</artifactId>
  <version>0.1</version>
  <name>Ejemplo Hibernate</name>
  <description>Proyecto de ejemplo con Hibernate</description>
 
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.3.7.Final</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>
    <dependency>
      <!-- Genera javadoc con el goal javadoc:javadoc -->
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>3.0.1</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <!-- Empaqueta la aplicación y sus dependencias en un solo jar -->
        <groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-assembly-plugin</artifactId>
	<executions>
	  <execution>
	    <phase>package</phase>
	    <goals>
	      <goal>single</goal>
	    </goals>
	    <configuration>
	      <archive>
	        <manifest>
                  <mainClass>com.sfaci.ejemplohibernate.Aplicacion</mainClass>
                </manifest>
	      </archive>
	      <descriptorRefs>
	        <descriptorRef>jar-with-dependencies</descriptorRef>
	      </descriptorRefs>
	    </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <!-- Especifica la versión de Java que emplea el proyecto -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

© 2016-2019 Santiago Faci