Spring Boot项目打包部署常见问题解决方案

Spring Boot项目打包部署常见问题解决方案

问题一:JAR包缺少主清单属性

问题描述

在使用 java -jar 命令启动Spring Boot项目时,遇到以下错误:

demo-service.jar中没有主清单属性

问题原因

  1. pom.xml 中 spring-boot-maven-plugin 配置不正确
  2. 打包时跳过了主清单文件的生成
  3. 主类(Main Class)配置缺失或错误

解决方案

  1. 检查并修正 pom.xml 配置
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><!-- 指定主类 --><mainClass>com.example.demo.DemoApplication</mainClass><!-- 删除 skip 配置,或设置为 false --><!-- <skip>true</skip> --></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>
  1. 验证主类是否存在
  • 确保主类路径正确
  • 检查主类是否包含 main 方法
  • 确保包名与配置一致
  1. 重新打包
# 清理之前的构建
mvn clean# 打包(跳过测试)
mvn package -DskipTests
  1. 验证JAR包
# 查看 MANIFEST.MF 内容
jar tvf target/demo-service.jar | grep MANIFEST
# 或
unzip -p target/demo-service.jar META-INF/MANIFEST.MF

问题二:JAR包名称不正确

问题描述

打包后的 JAR 文件名称与预期不符,导致部署脚本无法正确找到和执行 JAR 文件。

问题原因

  1. pom.xml 中的 artifactId 与期望的文件名不一致
  2. 未指定最终的打包名称

解决方案

  1. 设置固定的最终名称
<build><!-- 直接指定最终文件名 --><finalName>demo-service</finalName><plugins><!-- ... 其他插件配置 ... --></plugins>
</build>
  1. 使用项目属性动态设置
<properties><final.name>demo-service</final.name>
</properties><build><finalName>${final.name}</finalName>
</build>
  1. 验证打包结果
# 检查生成的文件
ls -l target/demo-service.jar

最佳实践

1. 项目配置检查清单

  • pom.xml 中包含 spring-boot-maven-plugin
  • 正确配置了主类路径
  • 移除了 skip 配置或设置为 false
  • 指定了正确的打包文件名
  • 所有必要的依赖都已声明

2. 打包流程

# 1. 清理旧的构建文件
mvn clean# 2. 编译和打包
mvn package -DskipTests# 3. 验证生成的文件
ls -l target/*.jar# 4. 检查 MANIFEST.MF
jar tvf target/demo-service.jar | grep MANIFEST# 5. 测试运行
java -jar target/demo-service.jar --spring.profiles.active=prod

3. 部署步骤

# 1. 创建部署目录
mkdir -p /opt/demo-service# 2. 复制文件
cp target/demo-service.jar /opt/demo-service/
cp service.sh /opt/demo-service/# 3. 设置权限
chmod +x /opt/demo-service/service.sh# 4. 启动服务
cd /opt/demo-service
./service.sh start# 5. 检查状态
./service.sh status

4. 常用调试命令

# 查看 JAR 包内容
jar tvf demo-service.jar# 查看日志
tail -f app.log# 检查进程
ps -ef | grep demo-service# 检查端口
netstat -nltp | grep 8080

注意事项

  1. 打包相关

    • 确保使用正确版本的 JDK
    • 注意 spring-boot-maven-plugin 的版本与 Spring Boot 版本匹配
    • 打包时建议先执行 clean 清理旧文件
  2. 部署相关

    • 确保目标服务器有足够的磁盘空间
    • 检查 JVM 参数配置是否合适
    • 注意文件权限设置
  3. 运行相关

    • 使用正确的 Spring profiles
    • 确保配置文件中的端口未被占用
    • 设置适当的日志级别便于排查问题

这个教程涵盖了 Spring Boot 项目打包部署中最常见的两个问题及其解决方案,希望能帮助大家更好地处理类似问题。如果遇到其他问题,也可以参考这个思路进行排查和解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916449.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【分享】外国使馆雷电综合防护系统改造方案(一)

1防雷项目设计思想&#xff1a;1.1设计依据&#xff1a;依据中国GB标准与部委颁发的设计规范的要求&#xff0c;该建筑物和大楼内之计算机房等设备都必须有完整完善之防护措施&#xff0c;保证该系统能正常运作。这包括电源供电系统、不间断供电系统&#xff0c;空调设备、电脑…

数据结构预备知识

在学习数据结构之前&#xff0c;有些知识是很有必要提前知道的&#xff0c;它们包括&#xff1a;集合框架、复杂度和泛型。本篇文章专门介绍这三个东西。1.集合框架1.1 什么是集合框架Java 集合框架(Java Collection Framework)&#xff0c;又被称为容器&#xff0c;是定义在 j…

【C++】数字cmath库常用函数

菜鸟传送门&#xff1a;https://www.runoob.com/cplusplus/cpp-numbers.html 作者废话&#xff1a;作为一个从业3年的JS人&#xff0c;现在重拾C&#xff0c;虽然众多语言都有很多相似之处&#xff08;至少算法&#xff0c;数学运算&#xff0c;数据结构等等那些都是相同的&…

神经网络(第二课第一周)

文章目录神经网络&#xff08;第二课第一周&#xff09;&#xff08;一&#xff09;神经网络的内涵&#xff08;二&#xff09;如何构建神经元层1、tensorflow如何处理数据&#xff08;Tensorflow 是由 Google 开发的机器学习包。&#xff09;2、详细的一些实验代码&#xff0c…

CCF-GESP 等级考试 2025年6月认证C++七级真题解析

1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;第1题 已知小写字母 b 的ASCII码为98&#xff0c;下列C代码的输出结果是&#xff08; &#xff09;。#include <iostream>using namespace std;int main() { char a b ^ 4; cout << a; …

【HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例

【HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例 截止到2025年&#xff0c;目前参考官方文档&#xff1a;访问 HarmonyOS三方库中心 。梳理了以下热门下载量和常用的三方库。 上述库的组合&#xff0c;可快速实现网络请求、UI搭建、状态管理等核心功能&#xff0c;显著…

SpringBoot 获取请求参数的常用注解

SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法&#xff1a;1. RequestParam用于获取查询参数(URL 参数)&#xff0c;适用于 GET 请求或 POST 表单提交。GetMapping("/user") public String getUser(RequestParam("id"…

【Linux篇章】Socket 套接字,竟让 UDP 网络通信如此丝滑,成为一招致胜的秘籍!

本篇文章将带大家了解网络通信是如何进行的&#xff08;如包括网络字节序&#xff0c;端口号&#xff0c;协议等&#xff09; &#xff1b;再对socket套接字进行介绍&#xff1b;以及一些udp-socket相关网络通信接口的介绍及使用&#xff1b;最后进行对基于udp的网络通信&#…

GIF图像格式

你可能已经知道&#xff0c;GIF 是一种光栅图像文件格式&#xff0c;它在不损失图像质量的前提下提供压缩功能&#xff0c;并且支持动画和透明度。 GIF 是“Graphics Interchange Format&#xff08;图形交换格式&#xff09;”的缩写。由于其良好的兼容性以及在不同应用程序和…

D3.js的力导向图使用入门笔记

D3.js是一个用于数据可视化的JavaScript库,广泛应用于Web端的数据交互式图形展示 中文文档&#xff1a;入门 | D3 中文网 一、D3.js核心特点 1、核心思想 将数据绑定到DOM元素&#xff0c;通过数据动态生成/修改可视化图形。 2、应用场景 交互式图表&#xff1a;如动态条…

Zookeeper的分布式事务与原子性:深入解析与实践指南

引言在分布式系统架构中&#xff0c;事务管理和原子性保证一直是极具挑战性的核心问题。作为分布式协调服务的标杆&#xff0c;Apache Zookeeper提供了一套独特而强大的机制来处理分布式环境下的原子操作。本文将深入探讨Zookeeper如何实现分布式事务的原子性保证&#xff0c;分…

Lua(迭代器)

Lua 迭代器基础概念Lua 迭代器是一种允许遍历集合&#xff08;如数组、表&#xff09;元素的机制。迭代器通常由两个部分组成&#xff1a;迭代函数和状态控制变量。每次调用迭代函数会返回集合中的下一个元素。泛型 for 循环Lua 提供了泛型 for 循环来简化迭代器的使用。语法如…

发布 VS Code 扩展的流程:以颜色主题为例

发布 VS Code 扩展的流程&#xff1a;以颜色主题为例 引言&#xff1a;您的 VS Code 扩展在市场中的旅程 Visual Studio Code (VS Code) 的强大扩展性是其广受欢迎的核心原因之一&#xff0c;它允许开发者通过添加语言支持、调试器和各种开发工具来定制和增强其集成开发环境&…

C++ 多线程(一)

C 多线程&#xff08;一&#xff09;1.std中的thread API 介绍开启一个线程获取线程信息API交换两个线程2.向线程里传递参数的方法第一种方式&#xff08;在创建线程的构造函数后携带参数&#xff09;第二种方式&#xff08;Lambda&#xff09;第三种方式&#xff08;成员函数&…

自动驾驶训练-tub详解

在 Donkeycar 的环境里&#xff0c;“tub” 是一个很关键的术语&#xff0c;它代表的是存储训练数据的目录。这些数据主要来源于自动驾驶模型训练期间收集的图像和控制指令。 Tub 的构成 一个标准的 tub 目录包含以下两类文件&#xff1a; JSON 记录文件&#xff1a;其命名格式…

CVPR多模态破题密钥:跨模对齐,信息串供

关注gongzhonghao【CVPR顶会精选】当今数字化时代&#xff0c;多模态技术正迅速改变我们与信息互动的方式。多模态被定义为在特定语境中多种符号资源的共存与协同。这种技术通过整合不同模态的数据&#xff0c;如文本、图像、音频等&#xff0c;为用户提供更丰富、更自然的交互…

小米路由器3G R3G 刷入Breed和OpenWrt 插入可共享网络的usb随身WiFi

小米 R3G 参数&#xff08;以下加黑加粗需要特别关注&#xff0c;灰常详细&#xff09; 市面上有R3G和R3Gv2两种型号, 注意区分, 后者是缩水版, 没有USB口. 内存只有128M, Flash只有16M. 这里描述的只适用于R3G. 就是这样 操作步骤开始&#xff0c;&#xff0c;注&#xff1a…

SpringBoot实现Serverless:手撸一个本地函数计算引擎

前言 最近突然冒出一个想法&#xff1a;能不能用SpringBoot自己实现一个类似AWS Lambda或阿里云函数计算的执行引擎&#xff1f; 说干就干&#xff0c;于是从零开始设计了一套基于SpringBoot的Serverless执行框架。 这套框架支持函数动态加载、按需执行、资源隔离&#xff0c;甚…

Java排序算法之<插入排序>

目录 1、插入排序 2、流程介绍 3、java实现 4、性能介绍 前言 在 Java 中&#xff0c; 冒泡排序&#xff08;Bubble Sort&#xff09; 和 选择排序&#xff08;Selection Sort&#xff09; 之后&#xff0c;下一个性能更好的排序算法通常是 插入排序&#xff08;Insertion …

《计算机网络》实验报告七 HTTP协议分析与测量

目 录 1、实验目的 2、实验环境 3、实验内容 4、实验结果与分析 4.1 使用tcpdump命令抓包 4.2 HTTP字段分析 5、实验小结 5.1 问题与解决办法&#xff1a; 5.2 心得体会&#xff1a; 1、实验目的 1、了解HTTP协议及其报文结构 2、了解HTTP操作过程&#xff1a;TCP三次…