Hacer que Maven ignore ciertos recursos al empaquetar el proyecto

Seguimos con la configuración de Maven. En este caso vamos a hacer que Maven ignore algunos recursos cuando empaquete nuestra aplicación JAR.

En mi caso, tengo un proyecto JAR realizado en Maven que depende de algunas librerías que no se encuentran en ningún repositorio de Maven. Esto es un pequeño problema, puesto que Maven las intentará descargar la primera vez al realizar cualquier acción sobre el proyecto y generará un error avisando que no puede encontrar dichas dependencias.

Mi solución parcial ha sido añadir las librerías a un subdirectorio dentro del directorio de recursos (en concreto 'src/main/resources/lib') y dejar que el desarrollador las instale manualmente la primera vez que descargue el proyecto. Ahora bien, esto ocasiona un inconveniente y es que no queremos que al empaquetar nuestro proyecto y generar el fichero JAR se incluyan dichas librerías. La solución consiste en configurar el plugin maven-jar-plugin para indicarle que no queremos que añada dichas librerías. Veamos cómo podríamos hacerlo:

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xsi="http://www.w3.org/2001/XMLSchema-instance"
schemalocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>        
<excludes>
<exclude>**/lib/</exclude>
</excludes>
</configuration>
</plugin>
...
</plugins>
...
</build>
...
</project>

Con esto le hemos dicho que ignore todas aquellas carpetas llamadas 'lib'. Podría haberse afinado un poco más simplemente cambiando el patrón dentro de <exclude> por otro del tipo:
  • 'src/main/resources/lib/*'
o
  • '**/lib/*.jar'
Esto puede aplicarse a cualquier recurso que no queramos que se incluya en el fichero JAR de nuestro proyecto.

2 comentarios:

Nadie dijo...

hola, he leido la entrada y creo que existen dos soluciones un poco más dentro del "paradigma maven".
1- Instalar las librerias en el repositorio local mediante la línea de comandos con mvn install:install-file.
2- La que uso yo. Un repositorio nexus en la red funcionando como proxy y cache para todos los equipos de desarrollo de la empresa.

Tal vez puedas implementar alguna de ellas y usar maven para una de las cosas que mejor funciona y que es manejar dependencias.

Fede dijo...

Buenas, en primer lugar agradecerte el comentario pues así uno comprueba que no está solo :).

Con respecto a lo que comentas, en el post exponía un ejemplo de cómo ignorar recursos lo que pasa es que no está bien elegido.

Mi idea era que con el proyecto se distribuyeran la/s librería/s que no están en los repositorios Maven pero que al empaquetar el JAR éstas no se incluyeran en la distribución de nuestro proyecto. De esta forma el usuario descarga el código fuente del proyecto y puede realizar un mvn install:install-file con las librerías que están en src/main/resources/lib/.

Sin embargo resulta más cómodo guardar las librerías JAR dentro de otra carpeta (por ejemplo lib dentro de la carpeta raíz del proyecto) y Maven las ignorará.

En estos próximos días intentaré cambiar el ejemplo para que se vea mejor la utilidad de ignorar recursos. Gracias!

Publicar un comentario