在Gradle的processResources过程中扩展application.yml导致MissingPropertyException异常

8
为了替换Spring Boot应用程序中的属性,我添加了如下内容: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$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

最初我的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”。我是否漏掉了什么?

1
如果你运行gradle properties,你能在列表中看到那些OPENSHIFT变量吗? - Tom Tresansky
不是这样的。它使用Spring Boot属性占位符在运行时解决,如此文档所述:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html - Marcel Overdijk
我现在也看到文档中的注释,即对于maven-resources-plugins,默认占位符${*}已更改为@*@。我想知道这对gradle processresources如何工作。它似乎与Spring Boot有关,而不是Gradle。 - Marcel Overdijk
那么问题可能是如何在使用Gradle expand时更改分隔符。 - Marcel Overdijk
或者如何通过使用类似于${的内容来忽略/转义资源中的${。 - Marcel Overdijk
1个回答

15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接