后端 Maven打包 JAR 文件、前端打包dist文件、通過后端服務訪問前端頁面、Nginx安裝與部署

打包 JAR 文件通常使用 Maven 或 Gradle 構建工具(Spring Boot 項目默認推薦 Maven)。以下是詳細步驟和常見問題解答:

一、后端 Maven打包 JAR 文件

1. 確保項目是 Spring Boot 項目

項目結構應包含 pom.xml(Maven 配置文件)。
父依賴需包含 Spring Boot Starter:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version> <!-- 使用最新版本 -->
</parent>

2. 執行 Maven 打包命令

在項目根目錄(含 pom.xml 的目錄)下運行:

mvn clean package

在這里插入圖片描述
clean:清理之前編譯的文件。
package:編譯代碼并打包成 JAR 文件。

3. 生成的可執行 JAR 文件

打包完成后,JAR 文件會出現在 target/ 目錄下:

target/
└── your-app-0.0.1-SNAPSHOT.jar  # 示例文件名

在這里插入圖片描述

可執行 JAR:Spring Boot 默認會生成包含所有依賴的 fat JAR(直接運行 java -jar 即可啟動)。

4. 運行 JAR 文件

jar包所在路徑執行包

java -jar your-app-0.0.1-SNAPSHOT.jar

在這里插入圖片描述

二、前端打包dist文件夾

1. 確保環境配置正確

Node.js 和 npm/yarn:確保已安裝,并通過以下命令驗證:

node -v
npm -v  # 或 yarn -v

2. 進入前端項目根目錄

打開終端(Windows:CMD/PowerShell;Mac/Linux:Terminal),導航到前端項目目錄:

**cd /path/to/your-frontend-project  # 替換為實際路徑**

在這里插入圖片描述

3. 安裝項目依賴

如果項目是首次運行或依賴未安裝,執行:

npm install  # 或 yarn install

此命令會根據 package.json 安裝所有依賴庫。

4. 構建生產環境代碼

(1)Vue 項目(使用 Vue CLI):

npm run build

默認會在項目根目錄生成 dist/ 文件夾,包含編譯后的靜態文件(HTML、CSS、JS、資源文件等)。
(2)React 項目(使用 Create React App):

npm run build

生成的文件默認在 build/ 文件夾中。若需輸出到 dist/,可修改 package.json 中的 build 腳本或配置 webpack。
(3)自定義配置:
如果項目使用自定義 Webpack 配置,檢查 webpack.prod.js 或類似文件,確認輸出路徑為 dist/:

output: {path: path.resolve(__dirname, 'dist'),  // 確保路徑正確filename: '[name].[contenthash].js'
}

在這里插入圖片描述

5.驗證 dist 文件夾

構建完成后,檢查項目根目錄是否生成 dist/ 文件夾,并包含以下內容:

dist/
├── index.html          # 主入口文件
├── static/             # 靜態資源(CSS、JS、圖片等)
│   ├── css/
│   ├── js/
│   └── images/
└── assets/             # 其他資源(如字體)

如果文件夾為空或未生成,檢查構建日志是否有錯誤。
在這里插入圖片描述

6. 部署 dist 文件夾

直接部署前端到 Nginx/Apache 和 集成到 Spring Boot 后端 的主要區別確實體現在 身份驗證(登錄)處理、路由控制 和 部署耦合性 上。

(1)直接部署:將 dist/ 文件夾內容上傳到服務器(如 Nginx、Apache 的靜態資源目錄)。
(2)集成到后端(如 Spring Boot):
將 dist/ 中的所有文件復制到后端項目的 src/main/resources/static/ 目錄。
重新打包后端 JAR/WAR 文件,啟動后即可通過后端服務訪問前端頁面。
在這里插入圖片描述

集成到 Spring Boot 的潛在問題:
(1) 登錄攔截導致前端資源無法訪問
問題場景:
后端配置了 Spring Security,攔截所有請求(包括靜態資源)。
例如:訪問 /css/app.css 時,后端返回登錄頁(302 重定向到 /login)。
錯誤表現:
瀏覽器控制臺報錯:Failed to load resource: the server responded with a status of 302。
頁面樣式/腳本加載失敗,顯示為空白或未格式化的內容。
(2) 路由沖突
問題場景:
前端使用 Vue Router/React Router 的 history 模式(如 /about、/profile)。
后端未配置全局路由回退到 index.html,導致直接訪問這些路徑時返回 404。
錯誤表現:
刷新頁面或直接輸入 URL 時,顯示 Whitelabel Error Page(Spring Boot 默認 404 頁面)。

三、通過后端服務訪問前端頁面(集成到后端)

1.打開文件資源管理器(Windows)或終端(Mac/Linux),將前端 dist/ 文件夾內的所有內容(不是 dist/ 本身)復制到后端項目的:

src/main/resources/static/

最終目錄結構:

src/
└── main/└── resources/└── static/├── index.html├── static/│   ├── css/│   ├── js/│   └── images/└── assets/

在這里插入圖片描述

2.重新打包后端項目

Maven 項目

cd /path/to/backend-project  # 進入后端項目目錄
mvn clean package           # 清理并重新打包

生成的 JAR/WAR 文件在 target/ 目錄下(如 your-app-0.0.1-SNAPSHOT.jar)。
Gradle 項目

cd /path/to/backend-project  # 進入后端項目目錄
./gradlew clean build       # 清理并重新打包

3.啟動后端服務

啟動 Spring Boot 應用

java -jar your-app-0.0.1-SNAPSHOT.jar

默認端口為 8080,訪問 http://localhost:8080 即可看到前端頁面。

注意:
(1)如果顯示404,改為http://localhost:8084/your-path/
在這里插入圖片描述
(2)如果顯示{"code":401,"msg":"No Authorization"},表示你的請求未通過 身份驗證(Authentication) 或 授權(Authorization) 檢查。
01 狀態碼:HTTP 401 表示 未授權(Unauthorized),通常由以下原因導致:
①請求未攜帶 認證憑證(如 Token、Cookie、Session ID)。
②攜帶的憑證 已過期 或 無效。
③后端接口配置了 安全策略(如 Spring Security、JWT、OAuth2),但前端未正確處理。

四、Nginx安裝與部署

(1)下載

Nginx官網
在這里插入圖片描述
下載到本地,進入 Nginx 目錄下,conf 文件夾下編輯 nginx.conf 文件,根據自己需求進行配置
在這里插入圖片描述

(2)配置nginx.conf

把前端dist重命名為test放在html下面,以后不同項目dist都放在這里以不同文件夾命名存放。
在這里插入圖片描述在這里插入圖片描述

server {listen       82;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;# 處理前端路由(如 Vue/React 的 history 模式)location / {# 相對路徑:你的dist即test在nginx里的目錄root   html/test;# 默認訪問 index.htmlindex  index.html index.htm;try_files $uri $uri/ /index.html;}# 可選:代理 API 請求(如 /api/ 轉發到后端:在vue.config里proxy下確認有沒有)location /api/ {proxy_pass http://127.0.0.1:8084/your-path/;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html# 錯誤頁面配置(可選)error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}

在這里插入圖片描述

(3)nginx雙擊閃退

server里listen的是82,在排除端口82已經被占用的情況下;
在你nginx下載目錄上cmd:
在這里插入圖片描述
輸入nginx -t
在這里插入圖片描述
Nginx 的配置文件必須包含 http、events 和 server 等核心塊,

簡單來說,我不小心把sever上面http、event不小心刪了。。。
在這里插入圖片描述

# 全局配置(必須包含 events 和 http)
events {# 即使為空也必須存在worker_connections 1024;  # 可選:設置每個 worker 進程的最大連接數
}http {# 通用配置(如 gzip、log_format)include       mime.types;default_type  application/octet-stream;# server 塊必須放在這里!server {listen       82;server_name  localhost;location / {root   html/test;index  index.html index.htm;try_files $uri $uri/ /index.html;}location /api/ {proxy_pass http://127.0.0.1:8084/your-path/;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}  
}

在這里插入圖片描述
通過http://127.0.0.1:82/可以訪問頁面了。如果是登陸頁面,記得redis也要啟動。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87687.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87687.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87687.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據系列 | 日志數據采集工具Filebeat的架構分析及應用

大數據系列 | 日志數據采集工具Filebeat的架構分析及應用 1. Filebeat的由來2. Filebeat原理架構分析3. Filebeat的應用3.1. 安裝Filebeat3.2. 實戰采集應用程序日志1. Filebeat的由來 在介紹Filebeat之前,先介紹一下Beats。Beats是一個家族的統稱,Beats家族有8個成員,早期的…

基于 Vue + RuoYi 架構設計的商城Web/小程序實訓課程

以下是基于 Vue RuoYi 架構設計的商城Web/小程序實訓課程方案&#xff0c;結合企業級開發需求與教學實踐&#xff0c;涵蓋全棧技術棧與實戰模塊&#xff1a; &#x1f4da; 一、課程概述 目標&#xff1a;通過Vue前端 RuoYi后端&#xff08;Spring Boot&#xff09;開發企業…

Puppeteer 相關漏洞-- Google 2025 Sourceless

題目的代碼非常簡單,核心只有這一句 page.goto(url, { timeout: 2000 });方案1 Puppeteer 是一個常用的自動化瀏覽器工具&#xff0c;默認支持 Chrome&#xff0c;但也可以配置支持 Firefox。然而&#xff0c;當 Puppeteer 運行在 Firefox 上時&#xff0c;會自動關閉一些安全特…

LucidShape 2024.09 最新

LucidShape的最新版本2024.09帶來了一系列新功能與增強功能&#xff0c;旨在解決光學開發者面臨的最常見和最復雜的挑戰。從微透鏡陣列&#xff08;MLA&#xff09;的自動掩模計算&#xff0c;到高級分析功能的改進&#xff0c;LucidShape 2024.09致力于簡化工作流程并增強設計…

mini-electron使用方法

把在官方群里“官方132版”目錄里下載的包里的minielectron_x64.exe解壓到你本地某個目錄&#xff0c;改名成electron.exe&#xff0c;比如G:\test\ele_test\mini_electron_pack\electron.exe。 修改你項目的package.json文件。一個例子是&#xff1a; {"name": &q…

Android 網絡全棧攻略(七)—— 從 OkHttp 攔截器來看 HTTP 協議二

Android 網絡全棧攻略系列文章&#xff1a; Android 網絡全棧攻略&#xff08;一&#xff09;—— HTTP 協議基礎 Android 網絡全棧攻略&#xff08;二&#xff09;—— 編碼、加密、哈希、序列化與字符集 Android 網絡全棧攻略&#xff08;三&#xff09;—— 登錄與授權 Andr…

45-使用scale實現圖形縮放

45-使用scale實現圖形縮放_嗶哩嗶哩_bilibili45-使用scale實現圖形縮放是一次性學會 Canvas 動畫繪圖&#xff08;核心精講50個案例&#xff09;2023最新教程的第46集視頻&#xff0c;該合集共計53集&#xff0c;視頻收藏或關注UP主&#xff0c;及時了解更多相關視頻內容。http…

軟件開發早期階段,使用存儲過程的優勢探討:敏捷開發下的利器

在現代軟件開發中&#xff0c;隨著持續集成與敏捷開發的深入推進&#xff0c;開發團隊越來越重視快速響應需求變更、快速上線迭代。在這種背景下&#xff0c;傳統將業務邏輯全部放在應用層的方式在某些階段顯得笨重。本文將探討在軟件開發初期&#xff0c;特別是在需求尚不穩定…

『 C++入門到放棄 』- string

C 學習筆記 - string 一、什麼是string ? string 是 C 中標準函數庫中的一個類&#xff0c;其包含在 中 該類封裝了C語言中字符串操作&#xff0c;提供內存管理自動化與更多的操作 支持複製、比較、插入、刪除、查找等功能 二、常用接口整理 類別常用方法 / 說明建立與指…

ARM架構下C++程序堆溢出與棧堆碰撞問題深度解析

ARM架構下C程序堆溢出與棧堆碰撞問題深度解析 一、問題背景&#xff1a;從崩潰現象到內存異常 在嵌入式系統開發中&#xff0c;程序崩潰是常見但棘手的問題。特別是在ARM架構設備上&#xff0c;一種典型的崩潰場景如下&#xff1a;程序在執行聚類算法或大規模數據處理時突然終…

.NET9 實現排序算法(MergeSortTest 和 QuickSortTest)性能測試

在 .NET 9 平臺下&#xff0c;我們對兩種經典的排序算法 MergeSortTest&#xff08;歸并排序&#xff09;和 QuickSortTest&#xff08;快速排序&#xff09;進行了性能基準測試&#xff08;Benchmark&#xff09;&#xff0c;以評估它們在不同數據規模下的執行效率、內存分配及…

RabbitMQ - SpringAMQP及Work模型

一、概述RabbitMQ是一個流行的開源消息代理&#xff0c;支持多種消息傳遞協議。它通常用于實現異步通信、解耦系統組件和分布式任務處理。Spring AMQP是Spring框架下的一個子項目&#xff0c;提供了對RabbitMQ的便捷訪問和操作。本文將詳細介紹RabbitMQ的工作模型&#xff08;W…

微信小程序51~60

1.界面交互-loading提示框 loading提示框用于增加用戶體驗&#xff0c; 對應的API有兩個&#xff1a; wx.showLoading()顯示loading提示框wx.hideLoading()關閉loading提示框 Page({getData () {//顯示loading提示框wx.showLoading({//提示內容不會自動換行&#xff0c;多出來的…

SqueezeBERT:計算機視覺能為自然語言處理在高效神經網絡方面帶來哪些啟示?

摘要 人類每天閱讀和撰寫數千億條消息。得益于大規模數據集、高性能計算系統和更優的神經網絡模型&#xff0c;自然語言處理&#xff08;NLP&#xff09;技術在理解、校對和組織這些消息方面取得了顯著進展。因此&#xff0c;將 NLP 部署于各類應用中&#xff0c;以幫助網頁用…

Springboot開發常見注解一覽

注解用法常用參數Configuration用于標記類為配置類&#xff0c;其中通過Bean方法定義Spring管理的組件。它替代XML配置&#xff0c;用Java代碼聲明對象創建邏輯&#xff0c;并確保單例等容器特性生效。相當于給Spring提供一個“制造說明書”來組裝應用部件RestControllerRestCo…

Maven高級——分模塊設計與開發

目錄 ?編輯 分模塊設計與開發 拆分策略 繼承與聚合 版本鎖定 聚合 作用 實現 Maven中繼承與聚合的聯系與區別&#xff1f; 聯系 區別 私服 分模塊設計與開發 將一個大項目拆分成若干個子模塊&#xff0c;方便項目的管理維護&#xff0c;擴展&#xff0c;也方便模…

線程池的七個參數設計源于對高并發場景下資源管理、系統穩定性與性能平衡的深刻洞察

?? 一、核心參數設計目標與解決的問題 參數設計目標解決的核心問題典型取值策略corePoolSize&#xff08;核心線程數&#xff09;維持常備線程資源避免頻繁創建/銷毀線程的開銷&#xff0c;提高響應速度CPU密集型&#xff1a;N_cpu 1 IO密集型&#xff1a;2 N_cpu maximum…

少樣本學習在計算機視覺中的應用:原理、挑戰與最新突破

在深度學習的黃金時代&#xff0c;大量標注數據似乎成了算法性能的前提。然而在許多現實場景中&#xff0c;如醫療圖像分析、工業缺陷檢測、遙感識別、甚至個性化視覺服務中&#xff0c;高質量、成規模的標注數據往往昂貴、稀缺&#xff0c;甚至難以獲得。這種場景正是**少樣本…

github在線圖床

github做的圖床&#xff0c;原理是利用github API實現的在線上傳&#xff0c;就一個頁面&#xff0c;css和js都是集成在頁面&#xff0c;相關信息保存在瀏覽器緩存中&#xff0c;配置一下即可使用 效果演示&#xff1a; github在線圖床 打開網站填寫下列信息 github用戶名&a…

css-多條記錄,自動換行與自動并行布局及gap兼容

實現這樣的內容布局&#xff0c;當一段文案長度超過當前行的時候自動占據一行&#xff0c;其他相近的不超過一行自動放在一行間隔隔開 關鍵實現原理&#xff1a; 彈性布局容器&#xff1a; .history-container {display: flex;flex-wrap: wrap;gap: 12px; }使用flex-wrap: wr…