将值文件中的值添加到yml文件中,该文件存储在本地存储在gradle中的.properties文件中

时间:2016-11-30 15:55:39

标签: gradle gradlew gradle-plugin

我试图在gradle的帮助下初始化我的dataSource但是gradle没有将值放入我的yml存储在我的机器上的.properties中,即~/.gradle,我做了一个。该位置的属性文件。

在Gradle中我创建了一个方法来从.properties文件中获取值,如下所示:

task copyDBConfig(type: Copy) {

    from 'src/main/resources'
    include 'app.yml'
    into 'build/resources/main'
    expand([
            DB_URI: project.findProperty("dbURI") ?: "",
            DB_USERNAME: project.findProperty("dbUsername") ?: "",
            DB_PASSWORD: project.findProperty("dbPassword") ?: "",
    ])
}

war.finalizedBy(copyDBConfig)

然后在我的yml文件中我有:

spring:
  datasource:
      url: ${DB_URI}
      username: ${DB_USERNAME}
      password: ${DB_PASSWORD}
      driverClassName: oracle.jdbc.OracleDriver

然而,当我构建war文件并查看app.yml文件时,没有正确的值,只有${DB_URI}等,而不是它应该从我的.properties文件获取的字符串并从中输入进入我的app.yml文件。

当我运行应用程序时,我收到以下错误:

java.sql.SQLException: Driver:oracle.jdbc.OracleDriver@af2025f returned null for URL:${DB_URI}

注意:build/resources/main/app.yml下,app.properties文件中的值就在那里,而不在war文件中。

1 个答案:

答案 0 :(得分:1)

在您的设置中,您指示Gradle 之后运行war任务时,它应始终运行copyDBConfig任务,这已经太晚了,因为战争已经建成。无论如何为此做一个自己的任务不是要走的路。而是像这样配置processResources任务:

processResources {
    filesMatching('app.yml') {
        expand DB_URI: project.findProperty("dbURI") ?: "",
               DB_USERNAME: project.findProperty("dbUsername") ?: "",
               DB_PASSWORD: project.findProperty("dbPassword") ?: ""
    }
}