Solución:
Ok, la versión se imprime si construyo el proyecto y lo ejecuto a través de java -jar. Pero si inicio la aplicación dentro de mi IDE (IntelliJ IDEA), la versión no se imprimirá.
Según la documentación de Spring Boot sobre la personalización del banner, el valor de ${application.version}
se toma del manifiesto jar.
El número de versión de su aplicación según lo declarado en MANIFEST.MF. Por ejemplo, versión de implementación: 1.0 se imprime como 1.0.
Cuando se ejecuta desde un IDE, es típico que la ejecución se produzca en los archivos de clase compilados por el IDE. Por lo general, el IDE no pasa por un ciclo completo de creación de todo el jar con un manifiesto. Por lo tanto, no hay MANIFEST.MF disponible en tiempo de ejecución para sustituir el valor de ${application.version}
, y te quedas con la ficha desnuda.
Esto no es un error en su código, y ya ha visto que funciona correctamente al hacer una compilación completa de jar. Si es realmente importante solucionar esto mientras se ejecuta a través del IDE, entonces podría considerar configurar un paso de compilación personalizado que pase primero por la compilación completa del jar y la generación del manifiesto. Sin embargo, probablemente sea exagerado. El banner podría validarse más tarde fuera del IDE probando con una versión de lanzamiento real del jar.
Solo como referencia, esto es lo que encontré que funciona para la línea de comandos en Spring Boot 2 con un proyecto basado en Gradle (usando el complemento Spring Boot Gradle). La consola de Intellij todavía no me funciona, pero ese problema existe desde hace varios años.
Utilizando el jar
la tarea no me estaba funcionando en un 2.0.5 estándar. build.gradle
, porque el bootJar
la tarea tiene prioridad:
De forma predeterminada, cuando se configuran las tareas bootJar o bootWar, las tareas jar o war están deshabilitadas.
Así que probé el bootJar
tarea, y funciona:
version = '0.0.1-SNAPSHOT'
bootJar {
mainClassName="com.demo.Application"
manifest {
attributes('Implementation-Title': 'Demo Application',
'Implementation-Version': version)
}
}
Nota: no es necesario mainClassName
y sus equivalentes si solo tiene una clase principal. La clase principal descubierta o configurada se agrega automáticamente al MANIFEST.MF como ‘Clase de inicio’.
Una vez que esto esté funcionando, puede usar ${application.title}
y ${application.version}
como de costumbre en su archivo Spring Boot banner.txt.
En mi caso, miro dentro del manifiesto creado por spring-boot-maven-plugin y no había ninguna versión de implementación dentro.
Para agregarlo, agrego el complemento maven-jar-plugin en la sección build.plugins de mi pom.xml.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifestEntries>
<Implementation-Version>${project.version}</Implementation-Version>
</manifestEntries>
</archive>
</configuration>
</plugin>
Después de eso, como ya mencioné antes, puedo ver el banner con la versión de la aplicación solo cuando hago java -jar et no con mi ide