带有 Gradle liquibase 插件的 Diffchangelog

问题描述

我正在尝试将 liquibase gradle 插件集成到我的项目中,以便能够运行 diffChangelog、更新等命令。 我有以下活动

liquibase {
    activities {
        main {
            changeLogFile 'src/main/resources/db/liquibase-changelog.xml'
            url appProps['spring.datasource.url']
            referenceUrl 'hibernate:spring:com.ourpetpolicy.server.db.entity?dialect=org.hibernate.dialect.PostgresqlDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy'
            username appProps['spring.datasource.username']
            password appProps['spring.datasource.password']
            defaultSchemaName 'public'
        }
    }
    runList = "main"
}

在我的实体中,我导入了一些 3rd 方转换器(例如 com.vladmihalcea.hibernate.type.json.JsonNodeBinaryType),所以当我运行 diffChangelog 时它会抛出以下异常:

1:42:29.008 ERROR [liquibase.integration.commandline.Main]: Unexpected error running Liquibase: Unable to load class [com.vladmihalcea.hibernate.type.json.JsonBinaryType]
liquibase.exception.DatabaseException: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [com.vladmihalcea.hibernate.type.json.JsonBinaryType]
        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:1205)
        at liquibase.integration.commandline.Main.run(Main.java:229)
        at liquibase.integration.commandline.Main.main(Main.java:143)
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [com.vladmihalcea.hibernate.type.json.JsonBinaryType]
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:136)
        at org.hibernate.boot.internal.ClassLoaderAccessImpl.classForName(ClassLoaderAccessImpl.java:67)
        at org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:536)
        at org.hibernate.cfg.SetSimpleValueTypeSecondPass.doSecondPass(SetSimpleValueTypeSecondPass.java:25)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1693)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1651)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:295)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.Metadata(EntityManagerFactoryBuilderImpl.java:1224)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255)
        at liquibase.ext.hibernate.database.HibernateSpringPackageDatabase.createEntityManagerFactory(HibernateSpringPackageDatabase.java:94)
        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:129)
        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.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
        at com.vladmihalcea.hibernate.type.util.Configuration.getobjectMapperWrapper(Configuration.java:140)
        at com.vladmihalcea.hibernate.type.json.JsonBinaryType.<init>(JsonBinaryType.java:29)
        at com.vladmihalcea.hibernate.type.json.JsonBinaryType.<clinit>(JsonBinaryType.java:24)
        at java.base/java.lang.class.forName0(Native Method)
        at java.base/java.lang.class.forName(Class.java:398)
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:130)
        ... 19 common frames omitted
Caused by: java.lang.classNotFoundException: com.fasterxml.jackson.core.JsonProcessingException
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
        ... 25 common frames omitted

FAILURE: Build Failed with an exception.

当我清理构建并重新运行时会生成更改日志,该日志会删除数据库中的所有内容。 由此我假设它在我的构建文件夹中查找实体,但那里没有 3rd 方类。

我可以配置插件以在源中查找实体而不是构建中的实体,或者如何在构建中创建依赖项? 或者还有其他解决办法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)