Spring Boot项目:java -cp命令启动解压后jar包的正确形式
问题分析与解决方案
你遇到的NoClassDefFoundError是因为Spring Boot可执行jar解压后的目录结构特殊,直接指定根目录作为类路径时,JVM无法找到项目编译后的类和依赖库的正确位置:
- 项目编译后的类文件都存放在
BOOT-INF/classes目录下 - 所有第三方依赖jar包都集中在
BOOT-INF/lib目录下
正确的java -cp启动命令
Windows环境
需要将BOOT-INF/classes和BOOT-INF/lib下的所有jar包都加入类路径,命令如下:
java -cp "C:\Users\User\Desktop\demo-0.0.1-SNAPSHOT\BOOT-INF\classes;C:\Users\User\Desktop\demo-0.0.1-SNAPSHOT\BOOT-INF\lib\*" com.example.demo.DemoApplication
注意:Windows系统的类路径分隔符是;,lib\*会自动匹配该目录下的所有jar包。
Linux/macOS环境
类路径分隔符使用:,命令形式如下:
java -cp "/path/to/demo-0.0.1-SNAPSHOT/BOOT-INF/classes:/path/to/demo-0.0.1-SNAPSHOT/BOOT-INF/lib/*" com.example.demo.DemoApplication
补充说明
虽然上述方式可以成功启动项目,但Spring Boot官方推荐使用JarLauncher的核心原因是它会自动处理类路径拼接、依赖加载以及Spring Boot特有的启动逻辑,能避免手动维护类路径的繁琐和出错风险。
内容的提问来源于stack exchange,提问作者Mehdi Rahimi
相关产品推荐
相关产品推荐

