执行Liquibase diffChangelog时遇Throwable转Exception类型转换异常求助
问题解决:Liquibase diffChangelog执行时ClassCastException异常
错误原因分析
这个java.lang.ClassCastException: java.lang.Throwable cannot be cast to java.lang.Exception异常是Liquibase内部日志处理逻辑的版本兼容性问题,核心原因是Liquibase核心、Hibernate扩展与Gradle插件版本不匹配,同时手动引入的picocli依赖与Liquibase内置版本冲突,导致类型转换错误。结合你使用Spring Boot 3.2.2(对应Hibernate 6.2.x)的环境,当前Liquibase 4.25.1版本存在适配缺陷。
具体解决方案
1. 升级Liquibase相关版本
将Liquibase生态的组件升级到兼容Spring Boot 3.2.x的版本:
- Liquibase Gradle插件从
2.2.1升级到2.2.2 - Liquibase核心和Hibernate6扩展从
4.25.1升级到4.27.0(该版本对Spring Boot 3.2兼容性更完善)
2. 移除冲突依赖
删除liquibaseRuntime 'info.picocli:picocli:4.7.5',Liquibase核心已内置适配的picocli版本,手动引入会引发版本冲突。
3. 修改后的关键配置片段
调整build.gradle的plugins和dependencies部分:
plugins { id 'java' id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management' version '1.1.4' id 'org.liquibase.gradle' version '2.2.2' // 升级插件版本 } dependencies { // ...其他依赖保持不变 liquibaseRuntime 'org.liquibase:liquibase-core:4.27.0' // 升级核心版本 liquibaseRuntime "org.liquibase.ext:liquibase-hibernate6:4.27.0" // 升级Hibernate扩展版本 liquibaseRuntime sourceSets.main.runtimeClasspath liquibaseRuntime sourceSets.main.output liquibaseRuntime 'org.yaml:snakeyaml:2.0' liquibaseRuntime 'org.postgresql:postgresql' }
验证步骤
- 清理Gradle缓存并刷新依赖:
./gradlew clean build --refresh-dependencies
- 重新执行diffChangelog命令:
./gradlew diffChangelog
内容的提问来源于stack exchange,提问作者Deepak Gangwar
相关产品推荐
相关产品推荐

