Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Failed Autowired of BuildProperties Spring Boot 2.1.5 & eclipse

I'm creating a very simple application with a few REST API's and it's currently working correctly until I try to use the BuildProperties on my health check API. While starting my application I get the following error:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2019-06-17 09:54:29.210 ERROR 10796 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   :   *************************** APPLICATION FAILED TO START ***************************  Description:  Field buildProperties in com.controller.HealthCheck required a bean of type 'org.springframework.boot.info.BuildProperties' that could not be found.  The injection point has the following annotations:     - @org.springframework.beans.factory.annotation.Autowired(required=true)  The following candidates were found but could not be injected:     - Bean method 'buildProperties' in 'ProjectInfoAutoConfiguration' not loaded because @ConditionalOnResource did not find resource '${spring.info.build.location:classpath:META-INF/build-info.properties}'   Action:  Consider revisiting the entries above or defining a bean of type 'org.springframework.boot.info.BuildProperties' in your configuration. 

I went to the build file and I also looked in the jar file created by the build and I see the build-info.properties is in fact there. In the jar file the path to the file is "BOOT-INF\classes\META-INF\". I also have other "Autowired" elements that are not having issues.

Where my code fails:

@RestController public class HealthCheck {      @Autowired     Environment environment;      @Autowired      BuildProperties buildProperties;       @GetMapping("/health")     public HealthCheckResponse healthCheck() {         return getHealthCheckResponse();     }      private HealthCheckResponse getHealthCheckResponse(){         HealthCheckResponse healthResponse = new HealthCheckResponse();         String[] profiles = environment.getActiveProfiles();          healthResponse.setServerTime(new Date());         healthResponse.setVersion(buildProperties.getVersion());         healthResponse.setEnvironment(profiles[0]);          return healthResponse;     } 

My gradle build file:

plugins {     id 'org.asciidoctor.convert' version '1.5.3'     id 'org.springframework.boot' version '2.1.5.RELEASE'     id 'java' }  apply plugin: 'io.spring.dependency-management' apply plugin: 'eclipse' apply plugin: 'java'  group = 'com' version = '0.0.1' sourceCompatibility = '12'  repositories {     mavenCentral() }  ext {     set('snippetsDir', file("build/generated-snippets")) }  dependencies {     implementation 'org.springframework.boot:spring-boot-starter-data-jpa'     implementation 'org.springframework.boot:spring-boot-starter-jersey'     implementation 'org.springframework.boot:spring-boot-starter-security'     implementation 'org.springframework.boot:spring-boot-starter-web'     implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:2.1.1'     runtimeOnly 'mysql:mysql-connector-java'     annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'     testImplementation 'org.springframework.boot:spring-boot-starter-test'     testImplementation 'org.springframework.restdocs:spring-restdocs-webtestclient'     testImplementation 'org.springframework.security:spring-security-test' }  test {     outputs.dir snippetsDir }  asciidoctor {     inputs.dir snippetsDir     dependsOn test }  springBoot {     buildInfo() } 

build-info.properties:

#Properties #Mon Jun 17 10:52:04 EDT 2019 build.version=0.0.1 build.group=com build.name=app build.artifact=app build.time=2019-06-17T14\:52\:04.829909200Z 
like image 699
ROOTKILL Avatar asked Jun 17 '19 15:06

ROOTKILL


Video Answer


1 Answers

Just run a mvn clean package and then restart the spring boot application from either Eclipse/IntelliJ.

like image 103
Anant Avatar answered Oct 07 '22 19:10

Anant