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

标签 gradle spring-boot

替换我的 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 .
我在这里错过了什么吗?

最佳答案

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

关于gradle - 在 Gradle processResources 期间扩展 application.yml 会产生 MissingPropertyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29153830/

相关文章:

android - 将具有 'number.x x'之类的InMobi依赖项添加到Android项目中会产生错误

java - Spring4 Boot WebService Controller 无法与 Gradle Tomcat 插件一起使用

java - Android Studio -- 无法应用插件 [id 'appengine']

android - 在我的应用程序中,我有一个模块(一个库)。当我在库构建中设置 'productFlavors' 时。应用程序不能依赖该模块

java - 在 SpringBoot 应用程序中下载时 Azure BlobNotFound

java - 为什么bean没有注入(inject)到测试类中

java - 使用应用程序插件持续构建和运行Gradle应用程序

java - StreamingResponseBody 返回空文件

java - Swagger UI 提示 ServerHttpRequest

java - 无法访问 com.mongodb.MongoClientSettings - MongoDB Java 驱动程序 3.7+