引用 application.yml 中的 gradle 个属性
Referencing gradle properties in application.yml
如果这个问题有人问过,或者有文档或者例子,还望见谅。我花了几个小时在 Whosebug 上寻找解决方案,甚至花了更多时间在 gradle 文档中,但未能完成这项工作。
我有一个 spring 引导项目,它具有非常标准的 maven 布局。我正在使用 gradle 2.4。这是相关文件的布局:
/gradle.properties
/build.gradle
/settings.gradle
/src/main/resources/application.yml
在gradle.properties
中,我定义了以下属性:
name=Sample microservice
description=brief description of the service goes here
version=1.0.0-SNAPSHOT
在我的 application.yml 文件中,我想将相应的 spring 属性设置为相同的值。 (我想将它们一起定义在一个地方并在多个地方使用它们。由于 version
通常在 gradle.properties 中定义,我想将其余部分也集中在那里。)
我已经在 application.yml 中尝试了以下行,但事情并没有像希望的那样工作:
info.app.name: ${name}
info.app.description: ${description}
info.app.version: ${version}
(我也试过${project.name}
等,也没用。)
I 运行 gradlew properties
... 属性按预期列出。但是,当我 运行 构建时,yaml 文件按预期复制到 \build\resources\main
,但 ${value}
标记未解析。
我还在 build.gradle
文件中包含了以下几行,但事情仍未解决。
processResources {
filesMatching('gradle.properties') { expand(project.properties) }
}
(我的目标是使用执行器 /info
端点将这些属性的值提供给服务调用者。)
任何对文档有帮助的建议或指示都将不胜感激!
您是否考虑过使用复制任务?在那里你可以定义变量来扩展:
application.yml:
info.app.name: ${project.name}
info.app.description: ${project.description}
info.app.version: ${project.version}
info.app.foo: ${foo}
build.gradle:
task copyConfig(type: Copy) {
from ('src/main/resources')
into 'build/config'
// refer to project and replace foo by string bar
expand(project: project, foo: 'bar')
}
如果你想把你的属性分开,你也可以参考一个属性文件:
expand(project.properties)
您可能想看看 gradle 文档:https://docs.gradle.org/current/userguide/working_with_files.html
你明白了吗?
经过多次修改,我发现这些值在运行时会扩展。当 Spring 定义环境中的属性时,${value} 标记会按照我希望的方式展开。经过深思熟虑,这是完全有道理的。这些值无法在构建时解析,因为它可以在各种地方设置。运行时 spring 属性反映当前值,无论 属性 是通过 jar 中的 application.yml 设置的,application.yml 坐在 jar 旁边,还是通过 -d 开关jar 被执行。
我最近遇到了同样的情况 - 这是对我有用的方法。
TL;DR:在 Spring Boot 1.2.5 中,application.yml 中的 info.* 属性被 /info 忽略;需要使用 application.properties 获取信息。* 属性。
首先,使用以下内容创建 src/main/resources/application.properties:
info.build.description=${description}
info.build.name=${name}
info.build.version=${version}
其次,将此代码段添加到您的 build.gradle 文件中:
processResources {
filesMatching("**/application.properties") {
expand( project.properties )
}
}
接下来,运行 正常构建。这将处理 application.properties 文件并在将文件复制到 build/resources/main/application.properties .
时用它们的构建时值替换变量
对我来说,当 运行 部署 .jar 时,我的 /info 端点会填充扩展值,这就是目标。
请注意,对于奖励积分,您可以将此添加到您的 build.gradle 以在 /info 端点中获取 Git 信息:
apply plugin: "com.gorylenko.gradle-git-properties"
您还需要将其添加到 build.gradle 的依赖项部分,才能正常工作:
classpath 'gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:1.+'
希望对您有所帮助!
如果这个问题有人问过,或者有文档或者例子,还望见谅。我花了几个小时在 Whosebug 上寻找解决方案,甚至花了更多时间在 gradle 文档中,但未能完成这项工作。
我有一个 spring 引导项目,它具有非常标准的 maven 布局。我正在使用 gradle 2.4。这是相关文件的布局:
/gradle.properties
/build.gradle
/settings.gradle
/src/main/resources/application.yml
在gradle.properties
中,我定义了以下属性:
name=Sample microservice
description=brief description of the service goes here
version=1.0.0-SNAPSHOT
在我的 application.yml 文件中,我想将相应的 spring 属性设置为相同的值。 (我想将它们一起定义在一个地方并在多个地方使用它们。由于 version
通常在 gradle.properties 中定义,我想将其余部分也集中在那里。)
我已经在 application.yml 中尝试了以下行,但事情并没有像希望的那样工作:
info.app.name: ${name}
info.app.description: ${description}
info.app.version: ${version}
(我也试过${project.name}
等,也没用。)
I 运行 gradlew properties
... 属性按预期列出。但是,当我 运行 构建时,yaml 文件按预期复制到 \build\resources\main
,但 ${value}
标记未解析。
我还在 build.gradle
文件中包含了以下几行,但事情仍未解决。
processResources {
filesMatching('gradle.properties') { expand(project.properties) }
}
(我的目标是使用执行器 /info
端点将这些属性的值提供给服务调用者。)
任何对文档有帮助的建议或指示都将不胜感激!
您是否考虑过使用复制任务?在那里你可以定义变量来扩展:
application.yml:
info.app.name: ${project.name}
info.app.description: ${project.description}
info.app.version: ${project.version}
info.app.foo: ${foo}
build.gradle:
task copyConfig(type: Copy) {
from ('src/main/resources')
into 'build/config'
// refer to project and replace foo by string bar
expand(project: project, foo: 'bar')
}
如果你想把你的属性分开,你也可以参考一个属性文件:
expand(project.properties)
您可能想看看 gradle 文档:https://docs.gradle.org/current/userguide/working_with_files.html
你明白了吗?
经过多次修改,我发现这些值在运行时会扩展。当 Spring 定义环境中的属性时,${value} 标记会按照我希望的方式展开。经过深思熟虑,这是完全有道理的。这些值无法在构建时解析,因为它可以在各种地方设置。运行时 spring 属性反映当前值,无论 属性 是通过 jar 中的 application.yml 设置的,application.yml 坐在 jar 旁边,还是通过 -d 开关jar 被执行。
我最近遇到了同样的情况 - 这是对我有用的方法。
TL;DR:在 Spring Boot 1.2.5 中,application.yml 中的 info.* 属性被 /info 忽略;需要使用 application.properties 获取信息。* 属性。
首先,使用以下内容创建 src/main/resources/application.properties:
info.build.description=${description}
info.build.name=${name}
info.build.version=${version}
其次,将此代码段添加到您的 build.gradle 文件中:
processResources {
filesMatching("**/application.properties") {
expand( project.properties )
}
}
接下来,运行 正常构建。这将处理 application.properties 文件并在将文件复制到 build/resources/main/application.properties .
时用它们的构建时值替换变量对我来说,当 运行 部署 .jar 时,我的 /info 端点会填充扩展值,这就是目标。
请注意,对于奖励积分,您可以将此添加到您的 build.gradle 以在 /info 端点中获取 Git 信息:
apply plugin: "com.gorylenko.gradle-git-properties"
您还需要将其添加到 build.gradle 的依赖项部分,才能正常工作:
classpath 'gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:1.+'
希望对您有所帮助!