Spring boot Diffchangelog和Gradle liquibase插件
我正在尝试将liquibase gradle插件集成到我的项目中,以便能够运行diffChangelog、update等命令。 我有以下活动Spring boot Diffchangelog和Gradle liquibase插件,spring-boot,gradle,liquibase,liquibase-hibernate,Spring Boot,Gradle,Liquibase,Liquibase Hibernate,我正在尝试将liquibase gradle插件集成到我的项目中,以便能够运行diffChangelog、update等命令。 我有以下活动 liquibase { activities { main { changeLogFile 'src/main/resources/db/liquibase-changelog.xml' url appProps['spring.datasource.url']
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"
}
在我的实体中,我导入了一些第三方转换器(例如com.vladmilcea.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.
1:42:29.008错误[liquibase.integration.commandline.Main]:运行liquibase时出现意外错误:无法加载类[com.vladmin.hibernate.type.json.JsonBinaryType]
liquibase.exception.DatabaseException:org.hibernate.boot.registry.classloading.spi.ClassLoadingException:无法加载类[com.vladmihalcea.hibernate.type.json.JsonBinaryType]
位于liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:132)
位于liquibase.integration.commandline.Main.createReferenceDatabaseFromCommandParams(Main.java:1604)
位于liquibase.integration.commandline.Main.doMigration(Main.java:1205)
位于liquibase.integration.commandline.Main.run(Main.java:229)
位于liquibase.integration.commandline.Main.Main(Main.java:143)
原因:org.hibernate.boot.registry.classloading.spi.ClassLoadingException:无法加载类[com.vladmihalcea.hibernate.type.json.JsonBinaryType]
位于org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:136)
位于org.hibernate.boot.internal.ClassLoaderAccessImpl.classForName(ClassLoaderAccessImpl.java:67)
位于org.hibernate.cfg.annotations.SimpleValueBinder.FillSimpleValueBinder(SimpleValueBinder.java:536)
位于org.hibernate.cfg.SetSimpleValueTypeSecondPass.doSecondPass(SetSimpleValueTypeSecondPass.java:25)
位于org.hibernate.boot.internal.InFlightMetadataCollectorImpl.ProcessSecondPass(InFlightMetadataCollectorImpl.java:1693)
位于org.hibernate.boot.internal.InFlightMetadataCollectorImpl.ProcessSecondPass(InFlightMetadataCollectorImpl.java:1651)
位于org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:295)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255)
位于liquibase.ext.hibernate.database.HibernateSpringPackageDatabase.createEntityManagerFactory(HibernateSpringPackageDatabase.java:94)
位于liquibase.ext.hibernate.database.HibernateEjb3Database.buildMetadataFromPath(HibernateEjb3Database.java:51)
位于liquibase.ext.hibernate.database.HibernateDatabase.buildMetadata(HibernateDatabase.java:136)
位于liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:75)
位于liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:129)
位于liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:149)
位于liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:97)
... 省略4个公共框架
原因:java.lang.NoClassDefFoundError:com/fasterxml/jackson/core/JsonProcessingException
位于com.vladmin.hibernate.type.util.Configuration.getObjectMapperWrapper(Configuration.java:140)
在com.vladmihalcea.hibernate.type.json.JsonBinaryType.(JsonBinaryType.java:29)
在com.vladmihalcea.hibernate.type.json.JsonBinaryType.(JsonBinaryType.java:24)
位于java.base/java.lang.Class.forName0(本机方法)
位于java.base/java.lang.Class.forName(Class.java:398)
位于org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:130)
... 省略19个公共框架
原因:java.lang.ClassNotFoundException:com.fasterxml.jackson.core.JsonProcessingException
位于java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
位于java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
位于java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 省略25个公共框架
失败:生成失败,出现异常。
当我清理构建并在中重新运行时,会生成changelog,删除数据库中的所有内容。
从这里,我假设它在我的构建文件夹中查找实体,但其中没有第三方类
我可以将插件配置为在源代码中查找实体,而不是在构建中查找实体,或者如何在构建中生成依赖项?
或者还有其他解决方案吗?看起来您缺少一些依赖项(由:java.lang.ClassNotFoundException:com.fasterxml.jackson.core.JsonProcessingException引起)。你能确认你用gradle设置了liquibase吗-