¿Cuál es la forma más simple de recuperar el número de versión de pom.xml de maven en código, es decir, programáticamente?
Suponiendo que está utilizando Java, puede
Cree un .properties
archivo en (más comúnmente) su src/main/resources
directorio (pero en el paso 4 podría decirle que busque en otro lado).
Establezca el valor de alguna propiedad en su .properties
archivo utilizando la propiedad estándar de Maven para la versión del proyecto: foo.bar=${project.version}
En su código Java, cargue el valor del archivo de propiedades como un recurso del classpath (google para ejemplos copiosos de cómo hacer esto, pero aquí hay un ejemplo para empezar ).
En Maven, habilite el filtrado de recursos: esto hará que Maven copie ese archivo en sus clases de salida y traduzca el recurso durante esa copia, interpretando la propiedad. Puede encontrar información aquí, pero generalmente solo hace esto en su pom:
<construcción> <recursos> <recurso> <directory> src / main / resources </directory> <filtering> verdadero </filtering> </resource> </resources> </build>
También puede acceder a otras propiedades estándar como project.name
, project.description
o incluso propiedades arbitrarias que ponga en su pom <properties>
, etc. El filtrado de recursos, combinado con los perfiles de Maven, puede proporcionarle un comportamiento de compilación variable en el momento de la compilación. Cuando especifica un perfil en tiempo de ejecución con -PmyProfile
, eso puede habilitar propiedades que luego pueden aparecer en su compilación.
src/main/resources
, ya que esto puede procesar todos los archivos ubicados en este directorio, incluidos los archivos binarios. Para evitar comportamientos impredecibles, es mejor filtrar en unsrc/main/resources-filtered
directorio, como se sugiere aquí . De todos modos, ¡gracias por este buen truco!La respuesta aceptada puede ser la mejor y más estable forma de obtener un número de versión en una aplicación de forma estática , pero en realidad no responde a la pregunta original: ¿Cómo recuperar el número de versión del artefacto de pom.xml? Por lo tanto, quiero ofrecer una alternativa que muestre cómo hacerlo dinámicamente durante el tiempo de ejecución:
Puedes usar Maven mismo. Para ser más exactos, puede usar una biblioteca Maven.
Y luego haz algo como esto en Java:
El registro de la consola es el siguiente:
Actualización 2017-10-31: para responder la pregunta de seguimiento de Simon Sobisch, modifiqué el ejemplo de esta manera:
fuente
package
d jar normal (las clases de dependencia no están integradas) y no funciona cuando se empaqueta con el complemento de ensamblaje mavenjar-with-dependencies
que obtengo ajava.io.FileNotFoundException: pom.xml
(está en el frasco final comoMETA-INF/maven/my.package/myapp/pom.xml
): ¿alguna pista de cómo resolver esto?Los artefactos empaquetados contienen un
META-INF/maven/${groupId}/${artifactId}/pom.properties
archivo cuyo contenido se ve así:Muchas aplicaciones usan este archivo para leer la versión de la aplicación / jar en tiempo de ejecución, no se requiere ninguna configuración.
El único problema con el enfoque anterior es que este archivo se genera (actualmente) durante la
package
fase y, por lo tanto, no estará presente durante las pruebas, etc. (hay un problema de Jira para cambiar esto, ver MJAR-76 ). Si esto es un problema para usted, entonces el enfoque descrito por Alex es el camino a seguir.fuente
También está el método descrito en la forma fácil de mostrar el número de versión de sus aplicaciones usando Maven :
Agregue esto a pom.xml
Entonces usa esto:
He encontrado que este método es más simple.
fuente
getImplementationVersion()
wasnull
. (Maven versión 3.0.4).war
artefactos, recuerde usar enmaven-war-plugin
lugar demaven-jar-plugin
getImplementationVersion()
devuelve nulo).Si usa empaques mvn como jar o war, use:
Lee una propiedad "Versión de implementación" del META-INF / MANIFEST.MF generado (que se establece en la versión de pom.xml) en el archivo.
fuente
Para complementar lo que @kieste ha publicado, que creo que es la mejor manera de tener información de compilación de Maven disponible en su código si está utilizando Spring-boot: la documentación en http://docs.spring.io/spring-boot/ docs / current / reference / htmlsingle / # production-ready-application-info es muy útil.
Sólo tiene que actuadores activar y agrega las propiedades que necesita en su
application.properties
oapplication.yml
fuente
Use esta biblioteca para facilitar la solución simple. Agregue al manifiesto lo que necesite y luego consulte por cadena.
http://manifests.jcabi.com/index.html
fuente
A veces, la línea de comandos de Maven es suficiente cuando se escribe algo relacionado con la versión del proyecto, por ejemplo, para la recuperación de artefactos a través de URL desde un repositorio:
Ejemplo de uso:
fuente
Obtener versión usando
this.getClass().getPackage().getImplementationVersion()
PD No olvides agregar:
fuente
Con referencia a la respuesta de ketankk :
Desafortunadamente, al agregar esto se confundió la forma en que mi aplicación manejó los recursos:
Pero el uso de esta etiqueta <manifest> de maven-assemble-plugin hizo el truco:
Así que pude obtener la versión usando
fuente