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

Spring Boot jar运行报NoClassDefFoundError,但插件可正常启动

问题原因分析

1. 手动配置maven-jar-plugin与spring-boot-maven-plugin打包逻辑冲突

Spring Boot的spring-boot-maven-plugin本身就负责生成可执行Fat Jar:它会自动把项目代码打包到BOOT-INF/classes,依赖包打包到BOOT-INF/lib,同时自动生成包含JarLauncher、Start-Class等关键配置的MANIFEST.MF。

你手动添加maven-jar-plugin并指定Manifest配置,会覆盖或干扰spring-boot-maven-plugin的默认打包流程——最终生成的jar可能只是仅包含项目代码的普通jar,并没有把依赖包打包到BOOT-INF/lib目录里。当用java -jar启动时,JarLauncher找不到BOOT-INF/lib中的Spring Boot核心依赖,就会抛出NoClassDefFoundError。

2. 不同启动方式的本质差异

  • mvn spring-boot:run或IDEA中执行插件:直接从本地Maven仓库加载依赖,结合编译后的项目类文件启动,不需要依赖Fat Jar的完整结构,所以能正常运行。
  • java -jar启动:完全依赖Fat Jar内部的BOOT-INF/classes和BOOT-INF/lib目录,如果这两个目录内容不完整(比如缺少核心依赖),就会触发类找不到的错误。

3. 打包命令可能有误

如果你执行的是普通的mvn package,只会触发maven-jar-plugin生成普通jar;而正确生成可执行Fat Jar需要执行mvn clean package spring-boot:repackage,或者确保spring-boot-maven-plugin已正确绑定到package阶段。

解决建议
  • 移除手动添加的maven-jar-plugin配置,让spring-boot-maven-plugin全权负责打包和Manifest生成。
  • 执行mvn clean package(若插件已绑定package阶段),或mvn clean spring-boot:package来生成正确的可执行Fat Jar。
  • 检查生成的jar内部结构:解压后确认存在BOOT-INF/classes和BOOT-INF/lib,且lib目录下包含Spring Boot核心依赖(如spring-boot-*.jar)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:35:14