简体   繁体   中英

Unable to get liquibase-hibernate plugin work with gradle

While trying to integrate liquibase:hibernate plugin with spring-boot:gradle:postgres, I'm getting stuck at this error when i run gradle diff command.

Unexpected error running Liquibase: org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager

SEVERE 3/11/18 5:27 PM: liquibase: org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager
java.lang.NoClassDefFoundError: org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager
        at liquibase.ext.hibernate.database.HibernateSpringPackageDatabase.createEntityManagerFactory(HibernateSpringPackageDatabase.java:69)
        at liquibase.ext.hibernate.database.HibernateEjb3Database.buildMetadataFromPath(HibernateEjb3Database.java:51)
        at liquibase.ext.hibernate.database.HibernateDatabase.buildMetadata(HibernateDatabase.java:136)
        at liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:75)
        at liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:131)
        at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:151)
        at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:85)
        at liquibase.integration.commandline.Main.createReferenceDatabaseFromCommandParams(Main.java:1283)
        at liquibase.integration.commandline.Main.doMigration(Main.java:996)
        at liquibase.integration.commandline.Main.run(Main.java:188)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
        at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
        at org.liquibase.gradle.LiquibaseTask.runLiquibase(LiquibaseTask.groovy:113)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)

This is my build.gradle :



    buildscript {
        ext {
            springBootVersion = '2.0.0.RELEASE'
            runList = 'main'
            diffLog = '$projectDir/src/main/resources/db/changelog/db.changelog-master.xml'
        }
        repositories {
            mavenCentral()
            maven { url 'https://plugins.gradle.org/m2/' }
            maven { url 'https://repo.spring.io/libs-snapshot' }
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
            classpath 'org.liquibase:liquibase-gradle-plugin:1.2.4'
            classpath 'org.liquibase:liquibase-core'
            classpath 'org.postgresql:postgresql:42.2.1'
            classpath 'org.liquibase.ext:liquibase-hibernate5:3.6'
        }
    }

    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'org.liquibase.gradle'

    group = 'com.project.sample'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = 1.8
    diffLog = '$projectDir/src/main/resources/db/changelog/db.changelog-{$version}.xml'

    repositories {
        mavenCentral()
    }


    dependencies {
        compile('org.springframework.boot:spring-boot-starter-data-jpa')
        compile('org.springframework.boot:spring-boot-starter-security')
        compile('org.springframework.boot:spring-boot-starter-web')
        compile('org.liquibase:liquibase-core')
        compile('org.springframework.session:spring-session-core')
        runtime('org.postgresql:postgresql')
        testCompile('org.springframework.boot:spring-boot-starter-test')
        testCompile('org.springframework.security:spring-security-test')
    }

    liquibase {
        activities {
            //noinspection GroovyAssignabilityCheck
            main {
                changeLogFile project.ext.diffLog
                url 'jdbc:postgresql://localhost:5432/quora'
                username 'ueducation'
                password 'u3duc@tion'
                referenceUrl 'hibernate:spring:com.project.sample.src.main.web.entities?dialect=org.hibernate.dialect.PostgreSQL9Dialect'
                referenceDriver 'liquibase.ext.hibernate.database.connection.HibernateDriver'
                logLevel 'debug'
            }
            runList = project.ext.runList
        }
    }

versions :

  • Spring-data-jpa : 2.0.5
  • Hibernate : 5.2.14
  • Liquibase-hibernate5 plugin : 3.6

I tried going through quite many posts on SO and around but unable to figure out. Any help is appreciated.

So, java.lang.NoClassDefFoundError means that the class is not loaded by the classloader. Hence, just need to add the sprind-data-jpa to the class path. the updated buildscript in build.gradle looks like

buildscript {
    ext {
        springBootVersion = '2.0.0.RELEASE'
        runList = 'main'
        diffLog = '$projectDir/src/main/resources/db/changelog/db.changelog-master.xml'
    }
    repositories {
        mavenCentral()
        maven { url 'https://plugins.gradle.org/m2/' }
        maven { url 'https://repo.spring.io/libs-snapshot' }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath 'org.liquibase:liquibase-gradle-plugin:1.2.4'
        classpath 'org.liquibase:liquibase-core'
        classpath 'org.postgresql:postgresql:42.2.1'
        classpath 'org.liquibase.ext:liquibase-hibernate5:3.6'
        classpath 'org.springframework.data:spring-data-jpa:2.0.5.RELEASE'
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM