在 Gradle processResources 期间扩展 application.yml 给出 MissingPropertyException
Expanding application.yml during Gradle processResources gives MissingPropertyException
为了替换我的 Spring 引导 application.yml
中的属性,我添加了:
processResources {
filesMatching("**/application.yml") {
expand(project.properties)
}
}
替换失败但给出 MissingPropertyException
:
Caused by: groovy.lang.MissingPropertyException: No such property: OPENSHIFT_MYSQL_DB_HOST for class: SimpleTemplateScript1
at SimpleTemplateScript1.run(SimpleTemplateScript1.groovy:49)
at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:95)
at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:84)
at org.gradle.api.internal.ChainingTransformer.transform(ChainingTransformer.java:37)
at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:39)
at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:46)
at org.gradle.api.internal.file.copy.DefaultFileCopyDetails.open(DefaultFileCopyDetails.java:86)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:56)
at org.gradle.api.internal.file.copy.DefaultFileCopyDetails.copyTo(DefaultFileCopyDetails.java:94)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyFile(AbstractFileTreeElement.java:93)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:74)
... 81 more
最初我的 application.yml
包含:
url: jdbc:mysql://${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/${OPENSHIFT_APP_NAME}
请注意,这些 Openshift 变量仅在 Openshift 生产环境中知道,但在 运行 本地开发模式下则不知道。
如 http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.Copy.html 所述:You can also include arbitrary Groovy code in the file, such as ${version ?: 'unknown'}
所以我将 application.yml
更改为:
url: jdbc:mysql://${OPENSHIFT_MYSQL_DB_HOST ?: ''}:${OPENSHIFT_MYSQL_DB_PORT ?: ''}/${OPENSHIFT_APP_NAME ?: ''}
但这给出了相同的 MissingPropertyException
。
我在这里遗漏了什么吗?
Gradle expand
${..}
样式与相同的 Spring 属性 占位符样式冲突,因此需要像 ${..}
一样进行转义.
现在已将其添加到 Spring 引导文档:https://github.com/spring-projects/spring-boot/commit/c0c67f2593dbfd17aa304b43f4da3a3678fa58eb
为了替换我的 Spring 引导 application.yml
中的属性,我添加了:
processResources {
filesMatching("**/application.yml") {
expand(project.properties)
}
}
替换失败但给出 MissingPropertyException
:
Caused by: groovy.lang.MissingPropertyException: No such property: OPENSHIFT_MYSQL_DB_HOST for class: SimpleTemplateScript1
at SimpleTemplateScript1.run(SimpleTemplateScript1.groovy:49)
at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:95)
at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:84)
at org.gradle.api.internal.ChainingTransformer.transform(ChainingTransformer.java:37)
at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:39)
at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:46)
at org.gradle.api.internal.file.copy.DefaultFileCopyDetails.open(DefaultFileCopyDetails.java:86)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:56)
at org.gradle.api.internal.file.copy.DefaultFileCopyDetails.copyTo(DefaultFileCopyDetails.java:94)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyFile(AbstractFileTreeElement.java:93)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:74)
... 81 more
最初我的 application.yml
包含:
url: jdbc:mysql://${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/${OPENSHIFT_APP_NAME}
请注意,这些 Openshift 变量仅在 Openshift 生产环境中知道,但在 运行 本地开发模式下则不知道。
如 http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.Copy.html 所述:You can also include arbitrary Groovy code in the file, such as ${version ?: 'unknown'}
所以我将 application.yml
更改为:
url: jdbc:mysql://${OPENSHIFT_MYSQL_DB_HOST ?: ''}:${OPENSHIFT_MYSQL_DB_PORT ?: ''}/${OPENSHIFT_APP_NAME ?: ''}
但这给出了相同的 MissingPropertyException
。
我在这里遗漏了什么吗?
Gradle expand
${..}
样式与相同的 Spring 属性 占位符样式冲突,因此需要像 ${..}
一样进行转义.
现在已将其添加到 Spring 引导文档:https://github.com/spring-projects/spring-boot/commit/c0c67f2593dbfd17aa304b43f4da3a3678fa58eb