El plugin de Maven de Spring Boot tiene un goal llamado build-info muy interesante. Su cometido es crear el fichero /target/classes/META-INF/build-info.properties con información sobre la compilación del proyecto.
El fichero build-info
mvn spring-boot:build-info
build.artifact=buildinfo
build.group=com.danielme.springboot
build.name=buildinfo
build.time=2022-09-16T18\:57\:22.154Z
build.version=0.0.1-SNAPSHOT
Por lo común vamos a querer que el fichero se genere al compilar el proyecto para que siempre esté actualizado.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>build-info</id>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
También se pueden añadir propiedades adicionales.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>build-info</id>
<goals>
<goal>build-info</goal>
</goals>
<configuration>
<additionalProperties>
<sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
<custom>custom value</custom>
<java.version>${java.version}</java.version>
<java.vendor>${java.vendor}</java.vendor>
</additionalProperties>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Se definen en el bloque additionalProperties en formato clave-valor. En el ejemplo anterior vemos que pueden ser valores fijos (custom) o bien variables disponibles en Maven. Estas últimas incluyen las propiedades de java.lang.System, tales como java.version o java.vendor.
Al igual que las propiedades ya ofrecidas por el plugin, sus claves tienen el prefijo build.
build.artifact=buildinfo
build.custom=custom value
build.group=com.danielme.springboot
build.java.vendor=AdoptOpenJDK
build.java.version=1.8
build.name=buildinfo
build.sourceEncoding=UTF-8
build.time=2022-09-17T12\:11\:19.257Z
build.version=0.0.1-SNAPSHOT
Estos son los restantes parámetros del plugin, al menos en Spring Boot 2.7:
- excludeInfoProperties. Lista de las propiedades que no deben aparecer en el fichero.
<excludeInfoProperties>
<excludeInfoProperty>version</excludeInfoProperty>
</excludeInfoProperties>
- outputFile. Permite cambiar la ubicación del fichero. Su valor predeterminado es ${project.build.outputDirectory}/META-INF/build-info.properties
.
- time. El valor para la propiedad time. Por omisión es ${project.build.outputTimestamp}.
Todo esto está muy bien, pero ¿para qué diantres sirve el fichero? Veámoslo.
La clase BuildProperties
Las propiedades son accesibles a través del bean BuildProperties que inyectaremos donde queramos leerlas. Ofrece un getter para cada propiedad predefinida y uno genérico para las personalizadas. La clave no debe tener el prefijo build.
package com.danielme.springboot.buildinfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.info.BuildProperties;
@SpringBootApplication
public class BuildInfoApplication implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(BuildInfoApplication.class);
@Autowired
private BuildProperties buildProperties;
public static void main(String[] args) {
SpringApplication.run(BuildInfoApplication.class, args);
}
@Override
public void run(String... args) {
logger.info("name: {}, custom: {}", buildProperties.getName(), buildProperties.get("custom"));
}
}
Spring Boot Actuator
Si el proyecto cuenta con Spring Boot Actuator, el contenido de build-info.properties se puede obtener vía REST en el endpoint /actuator/info. Consiste en un JSON que sigue la estructura jerárquica que definen los puntos en los nombres de las propiedades.

Desde Spring Boot 2.5 es obligatorio activar este endpoint en el application.properties.
management.endpoints.web.exposure.include=info
Código de ejemplo
El código de ejemplo es un proyecto que se encuentra en GitHub. Para más información sobre cómo utilizar GitHub, consultar este artículo.
Otros tutoriales relacionados con Spring
Introducción a Spring Boot: Aplicación Web con servicios REST y Spring Data JPA
Testing en Spring Boot con JUnit 45. Mockito, MockMvc, REST Assured, bases de datos embebidas
Spring Boot: Gestión de errores en aplicaciones web y REST