postgresql - liquibase diff 不起作用

标签 postgresql spring-boot gradle liquibase

我正在尝试使用 Hibernate 和 Liquibase 通过代码优先方法制作 Spring Boot 2.2.x 应用程序 (Java 13)。我想根据实体对象和数据库之间的差异生成迁移。

  • 操作系统 - Win 10 和 Mint 18
  • 构建系统 - gradle 6.0。
  • 数据库 - Postgres SQL。

我安装了 liquibase 实用程序 (3.8.2)。

我的gradle脚本:

    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath 'net.ltgt.gradle:gradle-apt-plugin:0.18'
        classpath 'org.postgresql:postgresql:42.2.9'
        classpath 'org.liquibase:liquibase-core:3.8.2'
        classpath "org.liquibase:liquibase-gradle-plugin:2.0.2"
    }
}

plugins {
    id 'org.springframework.boot' version '2.2.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'org.liquibase.gradle' version '2.0.2'
    id 'java'
}


group = 'com.goodt.drive'
version = '0.0.1-SNAPSHOT'

sourceCompatibility = '13'
targetCompatibility = '13'


diff.dependsOn compileJava
diffChangeLog.dependsOn compileJava
generateChangelog.dependsOn compileJava

dependencies {

    liquibaseRuntime 'org.liquibase:liquibase-core:3.8.2'
    liquibaseRuntime "jakarta.xml.bind:jakarta.xml.bind-api:2.3.2"
    liquibaseRuntime 'org.springframework.boot:spring-boot:2.2.1.RELEASE'
    liquibaseRuntime 'org.liquibase:liquibase-groovy-dsl:2.0.1'
    liquibaseRuntime 'org.postgresql:postgresql:42.2.9'
    liquibaseRuntime 'org.hibernate:hibernate-core:5.4.10.Final'
    liquibaseRuntime 'ch.qos.logback:logback-core:1.2.3'
    liquibaseRuntime 'ch.qos.logback:logback-classic:1.2.3'
    liquibaseRuntime sourceSets.main.output 

}

def dbChangeLog = "$projectDir/src/main/resources/db/changelog/changelog.xml"
def generatedChangeLog = "$projectDir/src/main/resources/db/changelog/generated_changelog.xml"


liquibase {
    activities {
        main {
            changeLogFile dbChangeLog
            outputFile generatedChangeLog
            driver "org.postgresql.Driver"
            classpath "$projectDir/lib/postgresql-42.2.9.jar"
            url "jdbc:postgresql://localhost:5432/webportal"
            username "developer"
            password "123"
            referenceUrl "hibernate:spring:com.wissance.webportal.application.model.entities?dialect=org.hibernate.dialect.PostgreSQL94Dialect"
            //referenceDriver 'liquibase.ext.hibernate.database.connection.HibernateDriver'
        }
    }
}

当我从 gradle 脚本运行 liquibase diff 命令时,如下所示: .\gradlew.bat diff 我得到以下输出:

> Task :diff
liquibase-plugin: Running the 'main' activity...
12:48:14.372 INFO  [liquibase.integration.commandline.Main]: Starting Liquibase at ёЁ, 15  эт. 2020 12:48:14 YEKT (version 3.8.2 #26 built at Tue Nov 26 04:53:39 UTC 2019)
12:48:15.323 INFO  [liquibase.integration.commandline.Main]: No Liquibase Pro license key supplied. Please set liquibaseProLicenseKey on command line or in liquibase.properties to use Liquibase Pro features.
12:48:15.325 INFO  [liquibase.integration.commandline.Main]: Liquibase Community 3.8.2 by Datical
12:48:15.614 ERROR [liquibase.integration.commandline.Main]: Unexpected error running Liquibase: java.lang.RuntimeException: Cannot find database driver: Driver class was not specified and could not be determined from the url (hibernate:spring:com.wissance.webportal.application.model.entities?dialect=org.hibernate.dialect.PostgreSQL94Dialect)
liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: java.lang.RuntimeException: Cannot find database driver: Driver class was not specified and could not be determined from the url (hibernate:spring:com.wissance.webportal.application.model.entities?dialect=org.hibernate.dialect.PostgreSQL94Dialect)
        at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:132)
        at liquibase.integration.commandline.Main.createReferenceDatabaseFromCommandParams(Main.java:1604)
        at liquibase.integration.commandline.Main.doMigration(Main.java:1200)
        at liquibase.integration.commandline.Main.run(Main.java:229)
        at liquibase.integration.commandline.Main.main(Main.java:143)
Caused by: liquibase.exception.DatabaseException: java.lang.RuntimeException: Cannot find database driver: Driver class was not specified and could not be determined from the url (hibernate:spring:com.wissance.webportal.application.model.entities?dialect=org.hibernate.dialect.PostgreSQL94Dialect)
        at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:263)
        at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:149)
        at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:97)
        ... 4 common frames omitted
Caused by: java.lang.RuntimeException: Cannot find database driver: Driver class was not specified and could not be determined from the url (hibernate:spring:com.wissance.webportal.application.model.entities?dialect=org.hibernate.dialect.PostgreSQL94Dialect)
        at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:200)
        ... 6 common frames omitted

最佳答案

堆栈跟踪表明 Liquibase 无法找到数据库驱动程序未指定驱动程序类,无法从 url (hibernate:spring:com.wissance.webportal.application. model.entities?dialect=org.hibernate.dialect.PostgreSQL94Dialect)

这表明您应该将 liquibase-hibernate jar 添加到您的依赖项中,并取消注释 gradle 脚本中的 referenceDriver 行。

关于postgresql - liquibase diff 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59747213/

相关文章:

android - 当存在 lintCheck 依赖项时,Gradle 构建工具 4.1.0 在 Android Studio 中同步失败

sql - 插入条件常量

php - 仅更新部分列 - 多行

php - 在第 3 个表中插入数据,并在其他 2 个表中插入值

java - Spring Boot中预处理第三方库方法

java - 如何处理运行时错误: java. lang.NoSuchMethodError

android - 如何在 build.gradle 中为版本指定通用字符串?

performance - postgreSQL优化

spring-boot - Spring Boot 和 Jboss wildfly 设置上下文根

Java:如何更改使用 spring boot yml 配置的 mongodb 端口