maven, jar, assembly y snapshots

 

Hace tiempo comenté que había un problema entre el plugin de maven que mete el fichero de manifiesto en el jar y el plugin de maven que hace un zip para distribuir. Este problema se presenta cuando entre los jar de los que dependemos hay versiones SNAPSHOT.

Estas son versiones de jar que están todavía en desarrollo y que por tanto no tienen una versión fija estable. Cuando generas un jar de una versión SNAPSHOT y lo subes al repositorio, maven cambia la palabra SNAPSHOT por la fecha de compilado. Así, por ejemplo, un jar descargador-0.1.0-SNAPSHOT.jar se sube al repositorio de jars como descargador-0.1.0-20081101.155652-1.jar, en el que las cifras, si te fijas, son la fecha y hora de compilado.

Pues bien, el plugin que genera el fichero de manifiesto y lo pone dentro del jar, pone el Class-Path usando descargador-0.1.0-SNAPSHOT.jar, mientras que el plugin assembly que hace el zip para distribuir mete dentro el jar descargador-0.1.0-20081101.155652-1.jar, por lo que al desempaquetarlo todo símplemente no funciona.

Esto es un bug conocido que todavía no tiene solución oficial. Y esto ha hecho que me echara atrás en meter un respositorio de snapshots en condiciones, ya que luego no podía generar los zip bien. Sin embargo, el repositorio de snapshot en condiciones se hace muy necesario en proyectos grandes, compuestos por muchos jar y en los que desarrolla mucha gente. La ventaja de un repositorio de estos es que yo puedo tener sacada del sistema de control de versones sólo aquella parte en la que estoy trabajando y cuando hago un mvn install o un mvn eclipse:eclipse, maven busca las versiones snapshot más modernas que mis compañeros han hecho para bajarmelas y ponerlas como parte de mi proyecto. Este mecanismo evita que tenga que tener sacados todos los fuentes, o que tenga que preocuparme manualmente de actualizar los jar de los demás. Así que me he puesto a investigar una posible solución.

Rebuscando en internet, he visto que hay una versión 2.2-beta-3 que corrige el bug (fijaos que en el enlace anterior el bug está marcado como fixed en dicha versión), así que me he puesto a buscarla. Dicha versión no está disponible todavía en ningún repositorio de maven, sólo están disponibles sus fuentes a través de subversion. Así que a ello, me los bajo y a compilar.

$ svn co http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-assembly-plugin/ maven_assembly
$ cd maven_assembly
$ mvn install

y ya la hemos liado. Después de un buen rato de bajarse jars y cosas de la web, da el error de que no encuentra un artifact. Nueva búsqueda por internet. Al final encuentro que es un problema también real y que hay que bajarse a mano un par de jars. Una vez hecho esto y el correspondiente mvn install:install-file para subirlo a mi repositorio local, el compilado ha ido sin problemas.

Ahora sólo queda lo más importante: probarlo.
 

Esta entrada ha sido publicada en maven y etiquetada como , . Guarda el enlace permanente.

Una respuesta en “maven, jar, assembly y snapshots

  1. Pingback: Diario de Programación » Blog Archive » maven, jar, assembly y snapshots (II)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.