Gradle如何从文件中加载属性并在liquibase任务中使用它

3

我正在尝试加载属性并在liquibase任务中使用它。 我可以成功加载属性并将其打印出来。 但是当我在liquibase任务中使用它时,gradle会抱怨找不到属性。

我正在使用:

classpath 'org.liquibase:liquibase-gradle-plugin:1.1.0'

加载属性:

def springApplicationProperties = "src/main/resources/application-${System.env.SPRING_PROFILES_ACTIVE}.properties"
def springProps = new Properties()
InputStream is = new FileInputStream("${springApplicationProperties}")
springProps.load(is)
println "${springProps['spring.datasource.url']}"

Liquibase块:

liquibase{
    activities {
        main {
                changeLogFile 'src/main/database/changelog.groovy'
                url ${springProps['spring.datasource.url']}
                username ${springProps['spring.datasource.user']}
                password ${springProps['spring.datasource.password']}
         }
    }
    runList = 'main'
}

我发现出现了以下错误:

对于类org.liquibase.gradle.Activity,没有$springProps属性

看起来在liquibase活动中无法访问springProps。 我尝试使用ext和project范围,但在liquibase块中都不可见。

1个回答

2
它将按照以下方式工作:
buildscript {
   repositories {
      mavenCentral()
   }

   dependencies {
      classpath 'org.liquibase:liquibase-gradle-plugin:1.1.0'
   }
}

apply plugin: 'java'
apply plugin: 'org.liquibase.gradle'

ext.springProps = new Properties()
InputStream is = new FileInputStream("src/main/resources/lol.properties")
springProps.load(is)

liquibase {
    activities {
        main {
                url springProps['spring.datasource.url']
                username springProps['spring.datasource.user']
                password springProps['spring.datasource.password']
         }
    }
    runList = 'main'
}

您不必要地添加了${}。我稍微修改了脚本,但是没有任何副作用。


谢谢 @Opal,它完美地运行了。那么,什么时候使用 ${}?什么时候不使用? - user5470299
你需要使用"${value}"(将被解析为GString)或者如果valueString类型的话,只需使用value。也可以尝试使用GString来查看是否有效。 - Opal

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