SpringBoot打包Jar包在CentOS服务器运行时崩溃求助
解决Spring Boot应用部署到CentOS EC2崩溃的问题
让我来帮你排查这个打包部署的问题,结合你描述的操作步骤和配置,核心问题大概率出在手动打包方式不符合Spring Boot的规范上,咱们一步步来解决:
一、问题根源分析
你用IDEA的Artifacts手动构建JAR,还修改了META-INF目录的位置,这直接破坏了Spring Boot可执行JAR的标准结构:
- Spring Boot的可执行JAR有固定的嵌套结构(依赖在
BOOT-INF/lib、主类信息在META-INF/MANIFEST.MF) - 你的pom.xml已经配置了官方的
spring-boot-maven-plugin,这才是Spring Boot推荐的打包工具,它会自动处理依赖打包、清单文件生成等关键环节,手动打包很容易导致依赖加载失败、主类找不到等致命错误
二、分步解决方案
1. 改用Maven插件打包(放弃IDEA Artifacts手动打包)
这是最关键的一步,具体操作:
- 在IDEA中打开右侧的Maven面板(如果没显示,点击
View > Tool Windows > Maven调出) - 找到你的项目,展开
Lifecycle选项:- 先双击
clean,清理之前手动打包生成的文件 - 再双击
package,Maven会自动用spring-boot-maven-plugin生成符合规范的可执行JAR
- 先双击
- 打包后的JAR默认在项目根目录的
target文件夹下,文件名是HadoopDriver-1.0-SNAPSHOT.jar(对应你pom里的artifactId和version)
2. 本地验证打包结果
在本地终端执行以下命令,确认JAR能正常启动,排除代码本身的问题:
java -jar target/HadoopDriver-1.0-SNAPSHOT.jar
如果本地能正常启动,再把这个JAR上传到CentOS EC2服务器。
3. CentOS服务器运行与排查
- 检查JDK版本:Spring Boot 2.0.2需要JDK 8环境,在服务器执行
java -version确认版本匹配 - 启动并查看日志:上传JAR后,执行以下命令启动,直接看控制台的崩溃日志(这是排查崩溃原因的核心):
java -jar HadoopDriver-1.0-SNAPSHOT.jar
如果需要后台运行,用以下命令把日志输出到文件:
nohup java -jar HadoopDriver-1.0-SNAPSHOT.jar > app.log 2>&1 &
之后可以通过cat app.log或者tail -f app.log查看详细错误信息。
4. 额外的依赖版本检查
你的pom.xml中Hadoop依赖版本不一致:
hadoop-yarn-client是3.1.0hadoop-common和hadoop-hdfs是2.6.1
这种跨版本依赖很容易导致类加载异常、方法找不到等问题,建议统一Hadoop的版本(比如全部用2.6.1或者3.1.0)。
三、为什么手动打包会崩溃?
Spring Boot的可执行JAR不是普通的JAR包,它采用了自定义的类加载器来加载嵌套在BOOT-INF/lib里的依赖,同时META-INF/MANIFEST.MF里必须包含Main-Class(Spring Boot的启动类)和Start-Class(你的应用主类)等关键属性。手动修改META-INF的位置会导致JVM无法找到正确的清单文件,或者依赖路径错误,直接引发启动崩溃。
内容的提问来源于stack exchange,提问作者Cosmin Ioniță
相关产品推荐
相关产品推荐

