微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 Gradle liquibase 插件的 Diffchangelog

如何解决带有 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 举报,一经查实,本站将立刻删除。