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
英文地址,請注明出處:http://en.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三次…