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

IDEA运行Spring Boot多模块项目报NoClassDefFoundError: liquibase/Scope

问题表现
  • Spring Boot整合Liquibase的多模块项目,执行mvn spring-boot:run命令可正常启动,通过IntelliJ IDEA直接启动主类时启动失败
  • 报错核心为Spring容器创建名为liquibase的Bean失败,实例化SpringLiquibase时抛出异常,根因为类缺失:

    java.lang.NoClassDefFoundError: liquibase/Scope
    底层触发ClassNotFoundException: liquibase.Scope

完整错误日志:

2022-07-15 14:22:36 ERROR 6908 --- [           main] o.s.boot.SpringApplication               : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [liquibase.integration.spring.SpringLiquibase]: Factory method 'liquibase' threw exception; nested exception is java.lang.NoClassDefFoundError: liquibase/Scope
    at spring.beans@5.3.20/org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at spring.context@5.3.20/org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154)
    at spring.context@5.3.20/org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908)
    at spring.context@5.3.20/org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    at spring.boot@2.7.0/org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
    at spring.boot@2.7.0/org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
    at spring.boot@2.7.0/org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
    at spring.boot@2.7.0/org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
    at spring.boot@2.7.0/org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
    at spring.boot@2.7.0/org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)
    at package/module1.Application.main(Application.java:23)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [liquibase.integration.spring.SpringLiquibase]: Factory method 'liquibase' threw exception; nested exception is java.lang.NoClassDefFoundError: liquibase/Scope
    at spring.beans@5.3.20/org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
    ... 21 common frames omitted
Caused by: java.lang.NoClassDefFoundError: liquibase/Scope
    at liquibase.integration.spring.SpringLiquibase.<init>(SpringLiquibase.java:56)
    at spring.boot.autoconfigure@2.7.0/org.springframework.boot.autoconfigure.liquibase.DataSourceClosingSpringLiquibase.<init>(DataSourceClosingSpringLiquibase.java:36)
    at spring.boot.autoconfigure@2.7.0/org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration$LiquibaseConfiguration.createSpringLiquibase(LiquibaseAutoConfiguration.java:113)
    at spring.boot.autoconfigure@2.7.0/org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration$LiquibaseConfiguration.liquibase(LiquibaseAutoConfiguration.java:90)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:577)
    at spring.beans@5.3.20/org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 22 common frames omitted
Caused by: java.lang.ClassNotFoundException: liquibase.Scope
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 29 common frames omitted

Process finished with exit code 1

当前报错模块的module-info.java配置如下:

open module module1 {
    requires spring.boot;
    requires spring.cloud.commons;
    requires spring.boot.autoconfigure;
    requires lombok;
    requires spring.context;
    requires spring.core;
    requires org.slf4j;
    requires spring.data.jpa;
    requires org.apache.logging.slf4j;
    requires spring.web;
    requires com.fasterxml.jackson.annotation;
    requires spring.cloud.openfeign.core;
    requires org.bouncycastle.provider;
    requires org.apache.commons.codec;
    requires io.netty.handler;
    requires java.transaction;
    requires spring.beans;;
}
故障原因

这个问题是JPMS(Java 9+模块化系统)的加载逻辑差异导致的:

  1. 执行mvn spring-boot:run时,Spring Boot Maven插件默认采用传统classpath模式加载所有依赖,不会校验module-info.java中声明的模块依赖关系,所有依赖包的类都能被正常加载,所以启动正常。
  2. IDEA识别到项目中存在module-info.java文件时,会默认启用JPMS模块路径模式启动,严格按照module-info.java中声明的requires条目加载可访问的类。当前模块配置中完全没有声明对Liquibase核心模块的依赖,JVM无法访问liquibase.Scope类,自然抛出类找不到的错误。
  3. 另外当前配置中requires spring.beans;;末尾多写了一个分号,属于语法冗余,虽然不会直接触发启动错误,但建议一并修正。
修复步骤
  • 打开报错模块的module-info.java文件,在依赖声明区块添加Liquibase核心模块的依赖声明:
    requires liquibase.core;
    
  • 删除requires spring.beans;;末尾多余的分号,修正为requires spring.beans;
  • 在IDEA中执行Maven的clean、compile命令,刷新项目依赖后重新启动应用即可。

内容的提问来源于stack exchange,提问作者Таисия Васильева

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:24:41