在我们的项目中,我们使用的是Liquibase gradle插件。最近,我们将ojdbc8插件更新到版本18.3.0.0。不幸的是,它导致我们的Liquibase任务因ORA-01882而失败:找不到时区区域。我发现了一些针对此错误的解决方案(例如:ORA-01882: timezone region not found),但我不知道如何将此-Duser.timezone或-Doracle.jdbc.timezoneAsRegion属性添加到gradle任务。我尝试了不同的方法,但没有成功。
这就是我们build.gradle的一些关键部分的样子:
liquibase {
activities {
oracle {
changeLogFile "$liquibasePath/db.changelog-master.xml"
driver liquibaseProps['oracle.driver']
url "jdbc:oracle:thin:@${liquibaseProps['oracle.ip.port']}:${liquibaseProps['oracle.schema']}"
username liquibaseProps['oracle.username']
password liquibaseProps['oracle.password']
outputDefaultSchema false
outputDefaultCatalog false
}
}
}
def generate(taskName, taskDescription, generateCommand) {
project.task(taskName, type: LiquibaseTask) {
group = 'Liquibase'
description = taskDescription
inputs.property('databases', getRunList())
inputs.dir liquibasePath
outputs.dir sqlScriptsPath
doLast {
new LiquibaseSqlCleanupTask(sqlScriptsPath).execute()
}
}
}
您需要在运行gradle时将其设置为系统属性。该文档位于https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_system_properties,但这里是最相关信息的复制/粘贴:
使用-D命令行选项,可以将系统属性传递给运行Gradle的JVM。 gradle命令的-D选项与java命令的-D选项具有相同的效果。
您还可以使用前缀systemProp在gradle.properties文件中设置系统属性。
因此,您可以在项目的根目录中创建一个gradle.properties
文件,其内容如下:
systemProp.oracle.jdbc.timezoneAsRegion=false