你遇到的错误 NoClassDefFoundError: org/springframework/boot/SpringApplication 表明 Spring Boot 的核心类未被正确加载到运行时环境中。以下是逐步解决方案:
- 检查 Maven 打包配置
确保 pom.xml 中正确配置了 Spring Boot 的 Maven 插件,且插件未被禁用。以下为关键配置:
xml
复制代码
org.springframework.boot
spring-boot-maven-plugin
3.1.0
com.yunhe.WarehouseSystemApp
repackage
- 重新打包项目
执行以下命令重新打包,确保插件生效:
bash
复制代码
mvn clean package
注意:不要加 -DskipTests 或 -Dmaven.test.skip,避免因测试失败导致打包异常。
检查 target 目录下生成的 Jar 文件是否为 Spring Boot 的 Fat Jar(通常比普通 Jar 大)。
3. 验证 Jar 内容
检查 Jar 包内是否包含 Spring Boot 的类:
bash
复制代码
jar tf wmspro-1.0-SNAPSHOT.jar | grep SpringApplication
如果输出包含 org/springframework/boot/SpringApplication.class,说明依赖已打包。
如果未找到,说明依赖未被正确打包,需检查 pom.xml 的依赖范围(例如 compile vs runtime)。
4. 直接运行 Spring Boot Jar
Spring Boot 的 Fat Jar 内置了所有依赖,直接运行即可:
bash
复制代码
java -jar target/wmspro-1.0-SNAPSHOT.jar
- 常见错误排查
情况 1:依赖未打包
检查 pom.xml 中 Spring Boot 依赖的版本是否与插件版本一致。
确保所有依赖的 scope 是 compile 或 runtime,而非 provided。
情况 2:手动修改了 Jar
如果手动删除或修改了 Jar 内容,会导致依赖丢失。必须通过 spring-boot-maven-plugin 重新打包。
情况 3:IDE 缓存问题
尝试清理 IDE 缓存(如 IntelliJ 的 File -> Invalidate Caches / Restart)后重新打包。 - 替代方案:使用 Maven 依赖管理
如果仍无法解决,可临时通过 Maven 的依赖参数运行:
bash
复制代码
mvn spring-boot:run
此命令会通过 Maven 自动下载依赖并运行项目,绕过手动打包的 Jar 问题。
总结
该错误通常是因为 Spring Boot 的依赖未被正确打包到 Jar 中。通过确保 spring-boot-maven-plugin 正确配置并重新打包,可以生成包含所有依赖的 Fat Jar,解决 NoClassDefFoundError 问题。