[Tip] Cómo copiar las dependencias en la fase de empaquetado con maven

Estándar

Maven es una magnífica herramienta para gestionar nuestros proyectos Java junto con sus dependencias. Esta herramienta centraliza nuestra configuración de dependencias a un único fichero llamado pom.xml que se encuentra en el directorio raíz de nuestro proyecto y que tiene una sintaxis muy estricta para definir todo lo que nos pueda ser necesario para nuestro desarrollo, desde dependencias a librerías externas, las cuales serán descargados desde su propio repositorio, hasta reglas específicas que necesitemos para nuestro proyecto pasando incluso por la ejecución de los test unitarios que pueda tener la aplicación.

No obstante, al ser un proyecto externo a Java siempre nos surgen dudas cuando comenzamos a usarlo. Este es mi caso cuando, trabajando en un proyecto personal, al tratar de crear un paquete jar para distribuir el proyecto las dependencias externas no eran copiadas a ese paquete y, por tanto, el proyecto no podía ejecutarse. Para corregir este comportamiento sólo necesitamos añadir un plugin al fichero de configuración del proyecto para que se copien dichas librerías a una carpeta específica creada ex profeso para satisfacer nuestras necesidades.

Se trata del plugin maven-dependency-plugin y deberemos añadir la siguiente configuración a la sección de plugins de nuestro pom.

...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
      </executions>
</plugin>
...

Como vemos en el xml anterior la ejecución del plugin está vinculada a la fase de empaquetado (lo cual se puede cambiar) y configuramos la localización de las dependencias en la carpeta lib, dentro del la carpeta que se comprimirá como el jar de salida.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s