項(xiàng)目架構(gòu)為前后端分離開發(fā)模式,客戶現(xiàn)場(chǎng)沒有Docker環(huán)境實(shí)施人員又不會(huì)安裝就只能想辦法將項(xiàng)目打包成獨(dú)立可運(yùn)行jar文件并提供Web靜態(tài)資源訪問。
目標(biāo)
- 獨(dú)立可運(yùn)行jar;
- 分離靜態(tài)html資源到j(luò)ar包外;
- 分離application.yml文件到j(luò)ar包外;
- 不依賴系統(tǒng)JDK資源,使用發(fā)布包內(nèi)部jre文件運(yùn)行;
- 項(xiàng)目依賴的lib打包到業(yè)務(wù)jar包外,減小業(yè)務(wù)jar體積;
創(chuàng)建SpringBoot項(xiàng)目
創(chuàng)建基礎(chǔ)項(xiàng)目
打開網(wǎng)站https://start.spring.io 按照下圖配置創(chuàng)建基礎(chǔ)項(xiàng)目
項(xiàng)目編譯采用Gradle方式編譯
開發(fā)語言Java
SpringBoot版本使用2.4.3
打包方式Jar方式
JDK版本8.x
Dependencies 暫時(shí)之選擇一個(gè)SpringWeb

配置完成后點(diǎn)擊下圖箭頭指向按鈕,會(huì)下載一個(gè)與項(xiàng)目名稱相同的zip包到本地,這里我們項(xiàng)目名稱沒有更改所以下載的zip包為demo.zip

創(chuàng)建測(cè)試頁面以及測(cè)試Api接口
1. 設(shè)置后段服務(wù)端口
將項(xiàng)目src/main/java/resources/application.properties文件更名為application.yml并將內(nèi)容做如下更改:
server:
servlet:
context-path: /demo
port: 8099
文件內(nèi)容注解:api主目錄/demo,api端口8099
2. 創(chuàng)建測(cè)試Apil類
在/src/main/java/com/example/demo目錄下創(chuàng)建包api,并創(chuàng)建類TestController并寫入如下內(nèi)容:
package com.example.demo.api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("test")
public class TestController {
@GetMapping("/hello")
public String hello() {
return "Hello this is demo !";
}
}
3. 創(chuàng)建WebConfig
在/src/main/java/com/example/demo目錄下創(chuàng)建包config,并創(chuàng)建類WebConfig并寫入如下內(nèi)容:
package com.example.demo.conifg;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 配置靜態(tài)目錄轉(zhuǎn)發(fā)
registry.addResourceHandler("/dist/**").addResourceLocations("classpath:/static/dist/");
}
}
4.創(chuàng)建Hello.html
在src/main/java/resources/static創(chuàng)建目錄dist并在dist目錄下創(chuàng)建hello.html文件并寫入如下內(nèi)容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<body>
<div style="color:red">
Hello this is demo html;
</div>
</body>
</html>
所有文件創(chuàng)建完成后項(xiàng)目目錄結(jié)構(gòu)如下圖:

5. 啟動(dòng)項(xiàng)目并測(cè)試相關(guān)代碼正確性
打開DemoApplication文件,啟動(dòng)項(xiàng)目

6.測(cè)試Api接口
打開瀏覽器并輸入http://localhost:8099/demo/test/hello,如下圖所示則證明Api接口成功。

6. 靜態(tài)資源轉(zhuǎn)發(fā)正確性驗(yàn)證
打開瀏覽器并輸入http://localhost:8099/demo/dist/hello.html,如下圖所示則證明Api接口成功。

到達(dá)這里已經(jīng)完成基礎(chǔ)的SpringBoot測(cè)試項(xiàng)目搭建,可以關(guān)閉IDEA環(huán)境中的測(cè)試服務(wù)。
7.將項(xiàng)目打包成jar
在項(xiàng)目根目錄下執(zhí)行命令gradle clean build -x test完成項(xiàng)目打包編譯,命令運(yùn)行成功后會(huì)在項(xiàng)目build/libs下生成發(fā)布jar如下圖所示:

8.執(zhí)行發(fā)布JAR
將jar包拷貝到任意目錄,在jar包同級(jí)目錄下打開命令行工具輸入命令java -jar xx.jar如下圖所示:

命令執(zhí)行成功會(huì)有如下顯示:

執(zhí)行第6步,第7步測(cè)試無誤后證明發(fā)布Jar打包成功。
后續(xù)操作進(jìn)入下一篇
SpringBoot Web項(xiàng)目打包獨(dú)立Jar(2)