복붙노트

[SPRING] 스프링 부트로 Gradle.build 버전 가져 오기

SPRING

스프링 부트로 Gradle.build 버전 가져 오기

내 Spring Boot 응용 프로그램의 응용 프로그램 버전을보기에 표시하려고합니다. 이 버전 정보에 액세스 할 수 있다고 확신합니다. 어떻게 해야할지 모르겠습니다.

나는이 정보를 다음과 같이 시도했다 : https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html 그리고 내 application.properties에 넣어 :

info.build.version=${version}

그리고 그것을 내 컨트롤러에 @Value ( "$ {version.test}")로드,하지만 작동하지 않습니다, 나는 같은 오류가 발생합니다 :

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'version' in string value "${version}"

내 응용 프로그램 버전, 봄 부팅 버전 등의 정보를 내 컨트롤러로 가져 오는 올바른 방법에 대한 제안 사항은 무엇입니까?

해결법

  1. ==============================

    1.참조 문서에 설명 된대로 $ {version} 자리 표시자를 프로젝트 버전으로 대체 할 수 있도록 응용 프로그램의 리소스를 처리하도록 Gradle에 지시해야합니다.

    참조 문서에 설명 된대로 $ {version} 자리 표시자를 프로젝트 버전으로 대체 할 수 있도록 응용 프로그램의 리소스를 처리하도록 Gradle에 지시해야합니다.

    processResources {
        expand(project.properties)
    }
    

    안전을 위해 application.properties 만 처리되도록 작업 범위를 좁힐 수 있습니다.

    processResources {
        filesMatching('application.properties') {
            expand(project.properties)
        }
    }
    

    이제 속성이 info.build.version이라고 가정하면 @Value를 통해 사용할 수 있습니다.

    @Value("${info.build.version}")
    
  2. ==============================

    2.application.yml에 다음을 추가하여이 문제를 해결했습니다.

    application.yml에 다음을 추가하여이 문제를 해결했습니다.

    ${version?:unknown}
    

    또한 cli : gradle bootRun과 IntelliJ에서 작동하며 IntelliJ에서 시작하기 전에 Gradle task processResources를 호출하거나 스프링 프로파일을 사용할 필요가 없습니다.

    Gradle ver : 4.6 및 Spring Boot ver : 2.0.1.RELEASE의이 작업. 희망이 도움이;)

  3. ==============================

    3.나는이 방법으로 그것을 해결했다. application.properties에서 info.build.version을 정의하십시오.

    나는이 방법으로 그것을 해결했다. application.properties에서 info.build.version을 정의하십시오.

    info.build.version=whatever
    

    다음과 함께 구성 요소에서 사용하십시오.

    @Value("${info.build.version}")
    private String version;
    

    이제 다음과 같이 build.gradle 파일에 버전 정보를 추가하십시오.

    version = '0.0.2-SNAPSHOT'
    

    그런 다음 application.properties를 정규식으로 대체하여 메소드를 추가하여 버전 정보를 업데이트하십시오.

    def updateApplicationProperties() {
        def configFile = new File('src/main/resources/application.properties')
        println "updating version to '${version}' in ${configFile}"
        String configContent = configFile.getText('UTF-8')
        configContent = configContent.replaceAll(/info\.build\.version=.*/, "info.build.version=${version}")
        configFile.write(configContent, 'UTF-8')
    }
    

    마지막으로 build 또는 bootRun을 트리거 할 때 메소드가 호출되는지 확인하십시오.

    allprojects {
        updateVersion()
    }
    

    그게 다야. 이 솔루션은 IDE에서 Spring Boot 응용 프로그램을 실행하는 경우뿐만 아니라 Gradle에서 응용 프로그램을 컴파일하도록 할 경우에도 작동합니다. 값은 업데이트되지 않지만 예외가 발생하지 않으며 Gradle을 실행하자마자 다시 업데이트됩니다.

    나는 이것이 다른 사람들을 도울뿐만 아니라 나를 위해 문제를 해결하기를 바랍니다. 더 적절한 솔루션을 찾을 수 없어서 혼자서 스크립트를 작성했습니다.

  4. from https://stackoverflow.com/questions/34963056/getting-the-gradle-build-version-into-spring-boot by cc-by-sa and MIT license