Nov 07

Plugin de maven para cambio de versiones en los pom.xml

 

Hace tiempo que tengo una necesidad en el trabajo y que he ido dejando olvidada por falta de tiempo. Cuando en maven manejas proyectos grandes, cada uno con varios subproyectos  y encima esos proyectos grandes dependen de otros proyectos grandes que también tienen sus subproyectos, llevar un versionado en condiciones de cada jar puede ser un infierno.

Me explico, tu proyecto grande lleva un fichero pom.xml. Cada uno de los subproyectos también. En los demás proyectos también y en sus subproyectos también. Algunos de los jar de alguno de esos subproyectos pueden ser librerías básicas, por ejemplo, una librería de componentes swing o de utilidades para acceso a base de datos, de gráficos, o lo que sea. Aparecen dependencias de esa librería en los pom.xml de muchos de los proyectos y subproyectos.

¿Qué pasa si cambiamos la versión de esa librería?. Que no queda más remedio que ir en todos los proyectos y subproyectos en los que queremos actualizar la versión buscando dicha librería por los pom.xml y cambiando el número de versión. Desde luego, una tarea rutinaria, pero algo aburrida, que lleva un tiempo y susceptible de error "humano" al hacerla a mano.

Así que pensé en hacer un script o algo que buscara por los pom.xml y cambiara automáticamente las versiones que se le dijeran. Así que por fin me puse a ello y como siempre, para jugar y aprender algo nuevo, en vez de un script, decidí hacerlo como plugin de maven.

El resultado es un plugin de maven con dos goals:

  • lista saca en un fichero un listado de todos los artifacts que aparecen en el pom.xml del proyecto y subproyectos actuales y con la nueva versión o groupId que queremos para cada sub/proyecto. Ese fichero lo utilizará el siguiente goal para hacer los cambios en el pom.xml.
  • cambia realiza los cambios indicado en el fichero anterior en todos los pom.xml que encuentre del proyecto y subproyecto. 
    • Si se ejecuta este goal en el mismo proyecto en que se ejecutó el lista, obtenemos un cambio de versión en el proyecto. Quizás el plugin release de maven hace esto mismo y mejor.
    • Si se copia el fichero de cambios en otros proyecto distinto y ejecutamos allí el goal cambia, conseguimos cambiar la versión de las dependencias con el primer proyecto.

Lo he estado usando ya y probando, va bastante bien, aunque veo que el uso no es demasiado intuitivo, siempre se me olvida hacer alguna cosa.

Ahí van un par de enlaces:

Aprender, pues aprendí algunas cosillas, sobre todo, ¿cómo no?, problemas con los que me he tropezado. El más gordo ha sido que no hay forma de hacer un deploy de un plugin en condiciones. En el pom.xml del plugin, el packaging es "maven-plugin". Pues el deploy no sabe hacer un deploy de una cosa cuyo packaging es "maven-plugin", así que para que funcione el deploy, debes poner packaging "jar". Pero claro, eso sube el fichero .pom al repositorio remoto con ese packaging que no es, así que luego, a mano y en el repositorio remoto, tienes que cambiar el "jar" por "maven-plugin" otra vez. Y el problema sigue, ya que al cambiar eso a mano, los ficheros de checksum/huella o como quieras llamarle .md5 y .sha1 que se crean en el repositorio remoto ya no cuadran y al bajarte el plugin con maven dan un warning.

Y yo creo que ya está bien de proyectos. Esta tarde me dedicaré a otra cosa.

Entradas relacionadas:

5 Responses to “Plugin de maven para cambio de versiones en los pom.xml”

  1. Joaquin Fernandez Campo Says:

    Holas! Llevo un tiempo siguiendo tu blog y se que solamente tratas temas de programación y relacionados pero me gustaría saber,si no te molesta, cual es tu opinión con respecto a toda la polémica que se ha formado en torno a los colegios de informática, la regulación y el proceso de Bolonia.
    Gracias, joaquín

  2. Chuidiang Says:

    Buenas:

    Pues lo siento, pero no estoy muy al tanto del asunto. Yo no soy ingeniero informático, entre otras cosas, porque cuando estudié todavía no existía esa carrera como tal ;-)

    Se bueno.

  3. Manolo Says:

    No he entendido muy bien el proposito del plugin. Un proyecto maven que tenga un parent ya hereda sus dependencias, no? en ese caso bastaría con cambiar sólo el pom del padre.

    Creo :)

  4. Chuidiang Says:

    Hola:

    El pom.xml padre tiene una versión. Todos los hijos, en su apartado parent, tienen repetido el mismo número de versión del padre, aparte que cada proyecto hijo puede/tiene su propio nonmbre y número de versión.

    Además, puede haber dependencias que afecten a unos hijos sí y a otros no, por lo que o bien lo pones en el padre haciendo que todos los hijos tengan esa dependencia (la necesiten o no), o bien pones esa depenencia repetida sólo en cada uno de los hijos que lo necesitan.

    Para proyectos no muy grandes (un proyectos padre con unos pocos hijos), el plugin ayuda algo pero no mucho. Se hace imprescindible (al menos para mí y por eso lo he hecho) cuando tienes cerca de diez o quince proyectos maven interralacionados entre sí y cada uno de ellos tiene a su vez subproyectos hijos (otros diez o quince) e incluso algunos de ellos tienen nietos….

    Se bueno.

  5. Diario de Programación » Blog Archive » Más sobre pom_version Says:

    […] tiempo comenté que me había hecho un plugin de maven, pom_version, para ayudarme a cambiar los números de versión en los pom.xml de los proyectos […]

Leave a Reply