web-dev-qa-db-ja.com

Gradle.buildバージョンをSpring Bootに取り込む

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}"
_

アプリのバージョン、スプリングブートのバージョンなどの情報をコントローラーに取得する適切な方法について何か提案はありますか?

14
Erik Pragt

リファレンスドキュメントで説明 のように、アプリケーションのリソースを処理するようにGradleに指示して、${version}プレースホルダーをプロジェクトのバージョンで置き換えるようにする必要があります。

processResources {
    expand(project.properties)
}

安全のために、application.propertiesのみが処理されるように絞り込みたい場合があります。

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

ここで、プロパティの名前がinfo.build.versionであると仮定すると、@Valueを介して利用できます。

@Value("${info.build.version}")
10
Andy Wilkinson

これをapplication.ymlに以下を追加することで解決しました:

${version?:unknown}

また、cli:gradle bootRunやIntelliJからも機能し、IntelliJで起動する前にGradleタスクprocessResourcesを呼び出したり、Springプロファイルを使用したりする必要はありません。

これは、Gradle ver:4.6およびSpring Boot ver:2.0.1.RELEASEでも動作します。それが役に立てば幸い ;)

3
brebDev

私はそれをこのように解決しました:info.build.versionapplication.propertiesを定義します:

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()
}

それでおしまい。このソリューションは、Gradleにアプリをコンパイルさせる場合と、IDEからSpring Bootアプリを実行する場合に機能します。値は更新されませんが、例外はスローされません。Gradleを実行するとすぐに、値が再度更新されます。

これが他の人に役立つことと、問題が解決したことを願っています。もっと適切な解決策が見つからなかったので、自分でスクリプトを作成しました。

1
user3105453

これを_build.gradle_に追加することもできます:

_springBoot {    
    buildInfo() 
}
_

次に、BuildProperties Beanを使用できます。

_@Autowired
private BuildProperties buildProperties;
_

そして、buildProperties.getVersion()でバージョンを取得します