Previously in Spring Boot 1.x, I wrote a Gradle task to copy the jar's build version to the application's application.yml and replaced a given property by regex, e.g. info.build.version: 0.0.1
Migrating to Spring Boot 2.0, I realise there's the io.spring.dependency-management plugin allowing me to define the buildInfo task:
springBoot {
    buildInfo()
}
This works and successfully displays the same information when accessing the /info actuator.
Now I would like to use the generated build.version in META-INF/build-info.properties in two use-cases:
Previously, it was enough to access the property like this: @Value("${info.build.version:undefined}") String buildVersion
or in logback-spring.xml: 
<springProperty scope="context" name="applicationVersion" source="info.build.version"/>
Unfortunately, both accessors don't work anymore, even if I replace info.build.version with build.version (as I would expect it to work). 
I believe including the version in logback is just a small step away from accessing the property through the @Value annotation, so that's the core of my question: 
How can I access the generated build.version in META-INF/build-info.properties through @Value? 
I also tried adding the task
processResources {
    filesMatching('build-info.properties') {
        expand(project.properties)
    }    
}
as suggested in https://stackoverflow.com/a/42051412/3105453 but that doesn't seem to have any effect.
When it comes to spring-boot, Almost every information that spring handles is most likely is accessible as a spring managed bean. 
For build information, spring-boot has a bean exposed for autowiring called buildProperties. This happens via ProjectInfoAutoConfiguration module. 
Along with Spring Expression language (SpEL) support for @Value annotations, You can get the expected results as mentioned below.
@Value("#{buildProperties.get('version')}")           // not 'build.version'
private String myAppBuildVersion;
Or better, Autowire the buildProperties bean directly to your components so you can play with it as you want.
@Autowired
private BuildProperties buildProperties;
NOTE: The autoconfiguration strips off the
build.prefix. So yourSpELexpressions should useversionas key. Notbuild.version.
UPDATE:
I was confused by your question first because the question was more over towards how to work with @Value annotation. So I will leave the above answer as is.
To help you with the logback-spring.xml, import the build-info.properties into logback-spring.xml as shown below. This allows each key in build-info.properties to be accessed using logback place-holders. (DO NOT CONFUSE THIS WITH SPRING PROPERTY PLACEHOLDERS OR SPRING-EXPRESSIONS)
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <springProperty scope="context" name="appLogTarget" source="app.log.target"
    defaultValue="CONSOLE"/>
  <property resource="META-INF/build-info.properties" />
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>[${build.version}] %d{ISO8601}" %-5p [%c{3}"] \(%t:%X{}"\) %m%n</Pattern>
    </layout>
  </appender>
 <root>
    <level value="DEBUG"/>
    <appender-ref ref="CONSOLE"/>
  </root>
</xml>
the "resource" property of <properties/> tag will look through the classpath resources and find the one which is appropriate.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With