在Gradle processResources期间扩展application.yml会产生MissingPropertyException

Mar*_*ijk 6 gradle spring-boot

要替换Spring Boot中的属性,我application.yml添加了:

processResources {
    filesMatching("**/application.yml") {
        expand(project.properties)
    }
}
Run Code Online (Sandbox Code Playgroud)

更换失败但给出了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$3.transform(FilterChain.java:95)
        at org.gradle.api.internal.file.copy.FilterChain$3.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
Run Code Online (Sandbox Code Playgroud)

最初我的application.yml包含:

url: jdbc:mysql://${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/${OPENSHIFT_APP_NAME}
Run Code Online (Sandbox Code Playgroud)

请注意,这些Openshift变量仅在Openshift生产环境中知道,但在dev模式下本地运行时则不知道.

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 ?: ''}
Run Code Online (Sandbox Code Playgroud)

但这也是一样的MissingPropertyException.我在这里错过了什么吗?

Mar*_*ijk 7

Gradle expand ${..}样式与相同的Spring属性占位符样式冲突,因此需要进行转义\${..}.现在将其添加到Spring Boot文档中:https://github.com/spring-projects/spring-boot/commit/c0c67f2593dbfd17aa304b43f4da3a3678fa58eb