Автосчетчик номера сборки (autoincrement build version)
Стоит важная задача государственной важности — нарисовать формочку «О программе» где водится всякая инфа о версиях компонент. И оказалось, что у нас нет версии билда. Это не проблема, ведь есть готовое решение. Как раз у спрингбута есть готовый класс, который предоставляет версию. Но не тут-то было.
Версию он не возвращает от слова совсем.
Начинаем опять воевать с грэдлом.
Сначала создаем файлик 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?!