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

Spring Boot无法加载依赖类问题求助(已确认类存在)

排查Spring Boot可执行Jar的NoClassDefFoundError问题

结合你的场景(Spring Boot 3.0.13 + JDK17,配置exec分类器,依赖存在但类加载失败),可以从以下方向逐一排查:

1. 模块化JDK的模块声明问题

JDK17默认启用模块化机制,若codegen-1.1.1001-SNAPSHOT.jar是包含module-info.java的模块化JAR,而主项目未声明对它的模块依赖,会直接导致类加载失败:

  • 排查步骤:
    • 解压codegen依赖Jar,检查是否存在module-info.class文件
    • 若存在,在主项目的module-info.java中添加requires <codegen的模块名>;(模块名对应module-info.java中的module声明)
    • 若主项目无module-info.java,可在启动命令中添加--add-modules <codegen的模块名>参数强制加载该模块

2. Spring Boot Maven插件打包完整性问题

配置classifier>exec</classifier>后,需确保打包流程正确触发Spring Boot的重打包逻辑:

  • 排查步骤:
    • 确认打包命令使用mvn clean package spring-boot:repackage,而非仅mvn clean package(仅执行package无法生成符合规范的可执行Jar结构)
    • 检查生成的exec Jar中BOOT-INF/classpath.idx文件,确认codegen-1.1.1001-SNAPSHOT.jar被列在类路径清单中
    • 若清单中无该依赖,可在插件配置中添加<includeGroupIds>com.sp</includeGroupIds>强制包含该依赖组

3. 类的间接依赖缺失

NoClassDefFoundError有时并非目标类本身缺失,而是该类依赖的其他类无法加载:

  • 排查步骤:
    • 查看完整错误栈,定位Caused by: ClassNotFoundException指向的具体类(这才是真正缺失的依赖)
    • 检查该类是否存在于codegen Jar或其他项目依赖中
    • 若缺失,在pom.xml中添加对应依赖

4. 包结构冲突导致类加载顺序异常

主项目包路径com.sp.obt.supplier与codegen中的类路径com.sp.obt.supplier.qantas.codegen.qbr存在重叠,可能导致Spring Boot的类加载器优先加载主项目中的类,而非依赖Jar中的目标类:

  • 排查步骤:
    • 检查主项目是否存在同名包路径com.sp.obt.supplier.qantas.codegen.qbr,若有则移除或重命名该包
    • 在启动命令中添加-verbose:class参数,查看类加载详细日志,确认EarnQuoteRequest的加载来源Jar

5. JDK版本兼容性问题

确认codegen依赖的编译版本与JDK17兼容:

  • 排查步骤:
    • 使用命令javap -verbose com.sp.obt.supplier.qantas.codegen.qbr.EarnQuoteRequest查看类的编译版本(major version字段:61对应JDK17,55对应JDK11)
    • 若codegen用低于JDK17的版本编译且未指定--release 17,需重新编译该依赖以适配JDK17

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:14:56