Стоит важная задача государственной важности — нарисовать формочку «О программе» где водится всякая инфа о версиях компонент. И оказалось, что у нас нет версии билда. Это не проблема, ведь есть готовое решение. Как раз у спрингбута есть готовый класс, который предоставляет версию. Но не тут-то было.
Версию он не возвращает от слова совсем.
Начинаем опять воевать с грэдлом.
Сначала создаем файлик version.properties и кладем его в корень проекта. Затем делаем таску в корневом gradle.build для автоинкримента при каждом билде.
task('increaseBuildVersion') {
def versionPropsFile = project.rootProject.file('version.properties')
if (versionPropsFile.canRead()) {
def versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def code = versionProps['build_version'].toInteger()+1
versionProps['build_version'] = code.toString()
versionProps.store(versionPropsFile.newWriter(), null)
} else {
throw new GradleException("Could not read version.properties!")
}
}.dependsOn('build')
Затем (если gradle.build несколько, то в тот, который в спрингбутовом контексте лежит) дописываем скриптик, чтобы его (спрингбута) класс увидел наши проперти:
ext{
def versionPropsFile = project.rootProject.file('version.properties')
def versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
build_version=versionProps['build_version']
}
springBoot{
buildInfo {
properties {
additional = [
'product_name': "$product_name",
'product_version': "$product_version",
'build_version': "$project.ext.build_version",
'java_version': "$java_version"
]
}
}
}
Ну а далее пишем сервис, который все это добро будет выдавать:
@Service
class AboutInfoService(
private val buildProperties: BuildProperties?) {
fun getAboutInfo() = AboutInfo.create {
it[productName] = buildProperties?.get("product_name")
it[productVersion] = buildProperties?.get("product_version")
it[buildNumber] = buildProperties?.get("build_version")
it[javaVersion] = buildProperties?.get("java_version")
}
}
Все замечательно работает, версия инкрементиццо, все казалось бы хорошо, но пришла беда откуда не ждали…
Что, блять, делать, если несколько разработчиков одновременно начнут коммитить свою version.properties?!