Мне удалось внедрить Gradle proj.ver в application.yml и после этого ввести его в служебное приложение. Мой application.yml выглядит так:
project:
version: ${version}
Но это работает, только если я запустил приложение из cli с:
gradle bootRun
Если я пытаюсь запустить приложение из IntelliJ, оно не сработало и не удалось:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'version' in value "${version}"
Я прочитал все ответы из Stackoverflow, и они предложили два решения:
Используйте пружинные профили
Измените конфигурацию запуска и запустите перед запуском задачи gradle: processResources
Я бы предпочел что-то вроде значения По умолчанию для proj.ver, когда я запускаю из IntelliJ. Это возможно? Или есть какие-нибудь лучшие решения для этой ситуации? Спасибо
Спасибо за ответ, но, как я написал в ответе, похоже, что только эта работа работает с обеих сторон: ${version?:unknown}
В этом нет необходимости, поскольку это выражение значения, а не выражение SpEL. Если это каким-то образом не проанализировано gradle (что, вероятно, и есть), который выполняет замену.
вы можете сказать, как вы вводите свойства Gradle в application.yaml?
Да, конечно, я обновил ответ. Вы можете узнать, как это сделать. Надеюсь, поможет.
Как сказал М. Дейнум выше в комментарии, мне удалось запустить приложение из IntelliJ, но теперь gradle bootRun
начал давать сбой:
Caused by: groovy.lang.MissingPropertyException: No such property: unknown for class: SimpleTemplateScript2
После еще нескольких исследований выяснилось, что ${version?:unknown}
(со знаком вопроса) работает либо из IDE, либо из cli.
Я обновил ответ, чтобы другие знали, как добавить информацию о сборке Gradle в Spring-boot:
1) Скажите Gradle передать данные сборки в файл Spring yml следующим образом:
processResources {
filesMatching('appInfo.yml') {
expand(project.properties)
}}
2) appInfo.yml будет выглядеть так:
project:
version: ${version?:unknown}
3) Вставьте версию сборки в службы Spring, например:
@Value("${project.version}")
private String applicationVersion;
${version:default}
должен предоставить вам значение по умолчанию, если он не найден.