¿Puedo configurar la versión del proyecto con un plugin buildnumber-maven-plugin?
-
22-07-2019 - |
Pregunta
Estoy tratando de agregar svn.revision a la versión del proyecto como un número de compilación y parece que no puedo hacerlo. Mi jar tiene el nombre correcto durante el empaquetado de durin, pero está instalado en mi repositorio local, es como si $ {buildNumber} no estuviera definido cuando se configuró la versión.
Me sale foo-1.0.0-SNAPSHOT- $ {buildNumber} en lugar de foo-1.0.0-SNAPSHOT- 304
¿Alguna idea de lo que estoy haciendo mal o agregar una revisión a la versión del proyecto es una mala idea? Gracias por la ayuda.
<project>
...
<version>1.0.0-${release.identifier}-${buildNumber}</version>
<properties>
<release.identifier>SNAPSHOT</release.identifier>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<id>useLastCommittedRevision</id>
<goals>
<goal>create</goal>
</goals>
<configuration>
<useLastCommittedRevision>true</useLastCommittedRevision>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</project>
Solución
El problema tiene dos partes:
-
Está intentando configurar el
buildNumber
en la versión antes de que se resuelva, por lo que siempre será$ {buildNumber}
en lugar del valor resuelto.En lugar de intentar cambiar dinámicamente la versión, debe establecer el
buildNumber
en el elementofinalName
en la compilación. Esto creará los artefactos con el nombre deseado en el repositorio local. -
El complemento de instalación ignorará el
finalName
y lo desplegará como1.0.0-SNAPSHOT
independientemente, no conozco una manera de abordar eso. ElbuildNumber
se agrega al Manifiesto si configura el complemento como se muestra a continuación.Entonces su configuración sería algo así como:
<version>1.0.0-${release.identifier}</version> ... <build> <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName> ... </build>
Evitaría usar números de compilación en proyectos SNAPSHOT
.
Maven proporciona la palabra clave SNAPSHOT
para indicar un proyecto volátil en desarrollo activo. Entonces, si hace referencia a un proyecto con una versión de dependencia SNAPSHOT
, Maven buscará automáticamente actualizaciones y mantendrá sus dependencias sincronizadas.
Si luego agrega un número de compilación al final de esa versión, deberá actualizar manualmente las dependencias, por lo que perderá cualquier beneficio de tener el sufijo SNAPSHOT
.
Yo personalmente evito usar números de compilación cuando sea posible de todos modos. Si tengo que actualizar un proyecto, simplemente pongo el número de versión o uso un sufijo como beta-2
o RC2
. Si necesita realizar un seguimiento de la revisión en el SNAPSHOT
, le recomiendo agregarlo al Manifiesto para que pueda verificar dónde se originó la compilación, pero use el sufijo estándar SNAPSHOT
para Permita que Maven resuelva las versiones normalmente. La siguiente configuración muestra cómo agregar la revisión al Manifiesto.
En lo que respecta a su configuración, me parece bien suponiendo que su url SCM esté configurada correctamente. Si no tiene una configuración SCM en su POM, ese puede ser el problema.
¿Se puede ejecutar con -X
y verificar si hay alguna salida del complemento que indique por qué no está configurando la propiedad?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>0.9.4</version>
<executions>
<execution>
<id>useLastCommittedRevision</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Implementation-Build>${buildNumber}</Implementation-Build>
</manifestEntries>
</archive>
</configuration>
</plugin>
Otros consejos
Agregue esto después del buildnumber-maven-plugin
:
<plugin>
<groupId>io.github.michaldo</groupId>
<artifactId>nashorn-maven-plugin</artifactId>
<version>0.0.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>eval</goal>
</goals>
<configuration>
<script>
$project.artifact.version = "${buildNumber}";
</script>
</configuration>
</execution>
</executions>
</plugin>
Y el buildNumber
será reconocido por el empaquetado y la implementación.