記錄將springboot的jar包和lib分離,使用docker-compose部署

本文講訴如何把jar里的lib依賴包獨立出來,方便更新服務時,縮小jar的體積,下面以若依的system服務為例,配置中的路徑請酌情修改,主要提供大致配置邏輯
?

第一步:修改項目的pom.xml,調整build的配置

<build><finalName>${project.artifactId}</finalName><plugins><!--這是默認的打包方式-->
<!--            <plugin>-->
<!--                <groupId>org.springframework.boot</groupId>-->
<!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
<!--                <version>${spring-boot.version}</version>-->
<!--                <executions>-->
<!--                    <execution>-->
<!--                        <goals>-->
<!--                            <goal>repackage</goal>-->
<!--                        </goals>-->
<!--                    </execution>-->
<!--                </executions>-->
<!--            </plugin>--><!-- 以下是分離lib的打包方式 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><executable>true</executable><layout>ZIP</layout><!--解決windows命令行窗口中文亂碼--><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments><!--這里是填寫需要包含進去的jar,必須項目中的某些模塊,會經常變動,那么就應該將其坐標寫進來如果沒有則nothing ,表示不打包依賴 --><includes><include><groupId>nothing</groupId><artifactId>nothing</artifactId></include></includes></configuration></plugin><!--拷貝依賴到jar外面的lib目錄--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><!--指定的依賴路徑--><outputDirectory>${project.build.directory}/lib</outputDirectory><excludeScope>provided</excludeScope></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><!--指定啟動類--><mainClass>org.dromara.system.RuoYiSystemApplication</mainClass><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix></manifest></archive></configuration></plugin></plugins></build>

打包后會得到分離的jar和lib


打開jar里的MANIFEST.MF,可看到指定了依賴包的路徑

第二步:構建dockerfile,不同的就是復制lib目錄到鏡像中

# 貝爾實驗室 Spring 官方推薦鏡像 JDK下載地址 https://bell-sw.com/pages/downloads/
FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
#FROM bellsoft/liberica-openjdk-debian:21.0.3-cds
#FROM findepi/graalvm:java17-nativeLABEL maintainer="Gavino"RUN mkdir -p /gavino/system/logs \/gavino/system/temp \/gavino/skywalking/agentWORKDIR /gavino/systemENV SERVER_PORT=9201 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""EXPOSE ${SERVER_PORT}#復制依賴 jar
COPY ${OUT_DIRECTORY}/lib ./libADD ruoyi-system.jar ./app.jarENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \#-Dskywalking.agent.service_name=ruoyi-system \#-javaagent:/gavino/skywalking/agent/skywalking-agent.jar \-XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \-jar app.jar

項目運行時,會根據MANIFEST.MF中配置的路徑加載依賴包,所以只需要復制lib到相應目錄

第三步:編寫docker-compose,注意dockerfile的路徑以及網絡配置,以下是我的配置,酌情修改

version: '3'services:ruoyi-system:container_name:ruoyi-systembuild:context: /cloud-pck/ruoyi-cloud/systemdockerfile: Dockerfileenvironment:# 時區上海TZ: Asia/Shanghaivolumes:# 配置文件- /docker/ruoyi-system/logs/:/gavino/system/logs# skywalking 探針- /docker/skywalking/agent/:/gavino/skywalking/agentprivileged: truenetworks:- ruoyi-cloud-netnetworks:ruoyi-cloud-net:external: true

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

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

相關文章

如何解決Redis中的熱點key問題

Redis中的熱點Key問題是指某些特定的Key被頻繁訪問&#xff0c;導致Redis中某個節點&#xff08;或實例&#xff09;承擔過高的壓力&#xff0c;可能引發性能瓶頸&#xff0c;甚至若緩存承受不住服務壓力掛掉后&#xff0c;仍有大量請求時直接打到DB上&#xff0c;由于DB層相對…

單片機實現模式轉換

[任務] 要求通過單片機實現以下功能&#xff1a; 1.單片機有三種工作模式(定義全局變量MM表示模式&#xff0c;MM1&#xff0c;2&#xff0c;3表示三種不同的模式) LED控制模式 風扇控制模式 蜂鳴器控制模式 2.可以在某一個模式下通過拓展板KEY1按鍵控制設備 (按…

安卓OCR使用(Google ML Kit)

OCR是一個很常用的功能&#xff0c;Google ML Kit提供了OCR能力&#xff0c;用起來也很簡單&#xff0c;本文介紹一下使用方法。 1. 相關概念 名詞概念解釋TextBlock塊一個段落Line行一行文本Element元素單詞&#xff1b;對漢字來說&#xff0c;類似"開頭 (分隔符)中間&…

數據庫(3)--針對列的CRUD操作

1.Create 新增 語法&#xff1a; insert into 表名 &#xff08;列名&#xff09;values &#xff08;列&#xff09;... 創建一個學生表用于演示&#xff1a; create table if not exists student( id bigint comment 編號, name varchar(20) comment 姓名 ); 1.1直接增加…

【設計模式-1】軟件設計模式概述

1. 軟件設計模式的產生背景 “設計模式”這個術語最初并不是出現在軟件設計中&#xff0c;而是被用于建筑領域的設計中。 1977 年&#xff0c;美國著名建筑大師、加利福尼亞大學伯克利分校環境結構中心主任克里斯托夫亞歷山大&#xff08;Christopher Alexander&#xff09;在…

Python爬蟲基礎——認識網頁結構(各種標簽的使用)

1、添加<div>標簽的代碼定義了兩個區塊的寬度和高度均為100px&#xff0c;邊框的格式也相同&#xff0c;只是區塊中顯示的內容不同&#xff1b; 2、添加<ul>和<ol>標簽分別用于定義無序列表和有序列表。<il>標簽位于<ul>標簽或<ol>標簽之…

Spring boot接入xxl-job

Spring boot接入xxl-job 導入maven包加入配置增加配置類創建執行器類&#xff08;寫job的業務邏輯&#xff09;去控制臺中配置job 導入maven包 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>…

[Git] git pull --rebase / git rebase origin/master

1. git pull --rebase 這個命令是用來更新當前分支的&#xff0c;它會從遠程倉庫拉取更新&#xff0c;然后將你的本地提交重新應用到更新后的基礎之上。它相當于先執行 git fetch&#xff0c;然后在當前分支上執行 git rebase origin/。使用 --rebase 而不是默認的 merge 可以…

去掉el-table中自帶的邊框線

1.問題:el-table中自帶的邊框線 2.解決后的效果: 3.分析:明明在el-table中沒有添加border,但是會出現邊框線. 可能的原因: 由 Element UI 的默認樣式或者表格的某些內置樣式引起的。比如,<el-table> 會通過 border-collapse 或 border-spacing 等屬性影響邊框的顯示。 4…

空間不足導致Oracle集群內存使用率暴增

一、現象 操作系統內存使用率告警&#xff0c;已達到98%,&#xff0c;告警內容如下&#xff1a; 【全景監控&#xff1a;Oracle主機內存使用監控】 【主機名】&#xff1a;XXXXX11 【主機IP】主機IP&#xff1a;*.126.15 【告警內容】當前內存使用率為98.9%&#xff0c;超警…

spark匯總

目錄 描述運行模式1. Windows模式代碼示例 2. Local模式3. Standalone模式 RDD描述特性RDD創建代碼示例&#xff08;并行化創建&#xff09;代碼示例&#xff08;讀取外部數據&#xff09;代碼示例&#xff08;讀取目錄下的所有文件&#xff09; 算子DAGSparkSQLSparkStreaming…

矩母函數(MGF)

矩母函數&#xff08;MGF&#xff09;簡介 矩母函數&#xff08;Moment Generating Function&#xff0c;MGF&#xff09;是概率統計中描述隨機變量分布特征的重要工具。MGF的主要用途是通過導數來計算隨機變量的矩&#xff08;比如均值、方差等&#xff09;&#xff0c;同時它…

React中的合成事件

合成事件與原生事件 區別&#xff1a; 1. 命名不一樣&#xff0c;原生用純小寫方式&#xff0c;react用小駝峰的方式 原生&#xff1a;onclick React的&#xff1a;onClick 2. 事件處理函數的寫法不一樣 原生的是傳入一個字符串&#xff0c;react寫法傳入一個回調函數 3.…

ajax與json

目錄 1、ajax1.1、什么是ajax1.2、ajax核心AJAX 工作原理示例代碼重要屬性和方法兼容性 1.3、jQuery ajax什么是jQuery ajaxjQuery AJAX 核心概念基本用法1. **使用 $.ajax() 方法**2. **使用簡化方法****使用 $.get() 方法****使用 $.post() 方法** 常用配置選項示例&#xff…

CSS——26. 偽元素2(“::before ,::after”)

::before偽類 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>偽元素</title><style type"text/css">div::before{content: "我最棒";}}</style></head><body><!--…

Openssl1.1.1s rpm包構建與升級

rpmbuild入門知識 openssh/ssl二進制升級 文章目錄 前言一、資源準備1.下載openssh、openssl二進制包2.安裝rpmbuild工具3.拷貝源碼包到SOURCES目錄下4.系統開啟telnet&#xff0c;防止意外導致shh無法連接5.編譯工具安裝6.補充說明 二、制作 OpenSSL RPM 包1.編寫 SPEC 文件2.…

patchwork++地面分割學習筆記

參考資料&#xff1a;古月居 - ROS機器人知識分享社區 https://zhuanlan.zhihu.com/p/644297447 patchwork算法一共包含四部分內容&#xff1a;提出了以下四個部分&#xff1a;RNR、RVPF、A-GLE 和 TGR。 1&#xff09;基于 3D LiDAR 反射模型的反射噪聲消除 (RNR)&#xff…

基于Spring Boot的海濱體育館管理系統的設計與實現

風定落花生&#xff0c;歌聲逐流水&#xff0c;大家好我是風歌&#xff0c;混跡在java圈的辛苦碼農。今天要和大家聊的是一款基于springboot的海濱體育館管理系統的設計與實現。項目源碼以及部署相關請聯系風歌&#xff0c;文末附上聯系信息 。 項目簡介&#xff1a; 寵物醫院…

通過Android Studio修改第三方jar包并重新生成jar包

最近接手了來自公司其他同事的一個Unity項目,里面有一個封裝的jar包要改動一下,無奈關于這個jar包的原工程文件丟失了,于是自己動手來修改下jar包,并做下記錄。 一、導入第三方jar包 1、新建項目EditJarDemo(項目名隨便取) 2、新建libs文件夾,把你要修改的third.jar 復制…

淺嘗Selenium自動化框架

淺嘗Selenium自動化框架 Selenium基本介紹Selenium原理Selenium學習要點寫個Selenium Demo結束 Selenium基本介紹 Selenium 是一個開源的自動化測試工具&#xff0c;只用于測試 Web 應用程序。它支持多種編程語言&#xff08;如 Java、Python、C# 等&#xff09;來編寫測試腳本…