You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot构建运行报错:Liquibase与Flyway相关类缺失问题排查

解决Spring Boot打包后java -jar启动时Liquibase/Flyway类找不到的问题

问题定位

核心矛盾是:IntelliJ内运行正常,但mvn clean package后用java -jar启动时,出现liquibase.exception.ChangeLogParseException、FlywayMigrationScriptMissingFailureAnalyzer这类ClassNotFoundException,本质是打包后的可执行Jar缺失必要依赖/资源,或Spring Boot自动配置冲突。

分步解决方案

1. 清理依赖冲突,统一数据库迁移工具

Spring Boot同时引入Liquibase和Flyway会触发自动配置冲突,且两者的依赖可能互相干扰:

  • 打开pom.xml,只保留你实际需要的迁移工具依赖:
    • 若用Liquibase:保留spring-boot-starter-liquibase,删除所有Flyway相关依赖(包括flyway-core、spring-boot-starter-flyway)
    • 若用Flyway:保留spring-boot-starter-flyway,删除所有Liquibase相关依赖
  • 确认依赖范围为默认的compile,不要手动设置为provided或test(这会导致maven打包时不把依赖打进Jar)

2. 修正Spring Boot Maven插件配置

确保spring-boot-maven-plugin正确配置repackage目标,这是生成包含所有依赖的可执行Jar的关键:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

配置完成后重新执行mvn clean package,生成的Jar才会包含所有必要依赖。

3. 验证资源文件路径正确性

  • 若用Flyway:确保src/main/resources/db/migration目录存在,且包含符合命名规范的迁移脚本(比如V1__init_schema.sql),同时application.properties中无需额外配置(Spring Boot会自动识别该路径)
  • 若用Liquibase:确保application.properties中配置的changelog路径正确,比如:
    spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.yaml
    
    且对应的文件存在于src/main/resources/db/changelog/下

4. 排除不必要的自动配置(可选)

如果确实需要同时保留两者的依赖(不推荐),可以在启动类上排除其中一个的自动配置,避免加载相关类:

@SpringBootApplication(exclude = {FlywayAutoConfiguration.class})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

错误原因解释

  • IntelliJ运行时,会直接加载项目的完整classpath,包括IDE自动补充的依赖、资源文件,即使依赖范围或路径有小问题,IDE也会自动兼容;但maven打包时,严格遵循pom.xml的依赖配置和资源路径规则,缺失的依赖/错误的路径会直接导致Jar启动时找不到类。
  • FlywayMigrationScriptMissingFailureAnalyzer找不到,要么是Flyway的starter依赖未正确引入(或版本与Spring Boot不兼容),要么是同时启用Liquibase和Flyway导致自动配置冲突,触发了未被正确加载的异常处理类。

内容的提问来源于stack exchange,提问作者WoistdasNiveau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:25:31