当前位置: 首页 > news >正文

记录将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

相关文章:

记录将springboot的jar包和lib分离,使用docker-compose部署

本文讲诉如何把jar里的lib依赖包独立出来&#xff0c;方便更新服务时&#xff0c;缩小jar的体积&#xff0c;下面以若依的system服务为例&#xff0c;配置中的路径请酌情修改&#xff0c;主要提供大致配置逻辑 第一步&#xff1a;修改项目的pom.xml&#xff0c;调整build的配…...

JavaScript 延迟加载的方法

延迟加载&#xff08;Lazy Loading&#xff09;是一种优化网页性能的技术&#xff0c;它允许资源&#xff08;如图片、脚本等&#xff09;在需要时才被加载&#xff0c;而不是在页面初次加载时全部加载。这可以减少初始页面加载时间&#xff0c;提升用户体验&#xff0c;特别是…...

xrdp连接闪退情况之一

错误核查 首先使用命令vim ~/.xsession-errors&#xff0c;当里面的报错信息为WARNING **: Could not make bus activated clients aware of XDG_CURRENT_DESKTOPGNOME environment variable:Failed to execute child process “dbus-launch” (No such file or directory)&am…...

数据分析思维(八):分析方法——RFM分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python&#xff0c;更重要的是数据分析思维。没有数据分析思维和业务知识&#xff0c;就算拿到一堆数据&#xff0c;也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#xff0c;本文内容就是提取…...

WebRTC 在视频联网平台中的应用:开启实时通信新篇章

在当今这个以数字化为显著特征的时代浪潮之下&#xff0c;实时通信已然稳稳扎根于人们生活与工作的方方面面&#xff0c;成为了其中不可或缺的关键一环。回首日常生活&#xff0c;远程办公场景中的视频会议让分散各地的团队成员能够跨越地理距离的鸿沟&#xff0c;齐聚一堂共商…...

Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开

element文档链接&#xff1a; https://element-plus.org/zh-CN/component/form.html 一、el-table表格行展开关闭箭头替换成加减号 注&#xff1a;Vue3在样式中修改箭头图标无效&#xff0c;可能我设置不对&#xff0c;欢迎各位来交流指导 转变思路&#xff1a;隐藏箭头&…...

oracle闪回恢复数据:(闪回查询,闪回表,闪回库,回收站恢复)

oracle的闪回查询&#xff0c;可以查询提交在表空间的闪回数据&#xff0c;并可以还原所查询的数据&#xff0c;用于恢复短时间内的delele 或者 update 误操作&#xff0c;非常方便&#xff0c;缺点是只能恢复大概几小时内的数据。 文章目录 概要闪回查询恢复数据的主要方法包括…...

C语言——结构体,位段,枚举和联合

目录 前言 结构体 1含义 2语法 3匿名结构体 4结构体自引用 5结构体的定义与初始化 6内存对齐 7修改对齐数 8结构体传参 位段 1含义 2位段的内存分配 ​编辑3位段的问题 4位段的应用 枚举 1含义 2定义 3枚举优点 4枚举使用 联合 1含义 2定义 3特点 4计…...

期末概率论总结提纲(仅适用于本校,看文中说明)

文章目录 说明A选择题1.硬币2.两个事件的关系 与或非3.概率和为14.概率密度 均匀分布5.联合分布率求未知参数6.联合分布率求未知参数7.什么是统计量&#xff08;记忆即可&#xff09;8.矩估计量9.117页12题10.显著水平阿尔法&#xff08;背公式就完了&#xff09; 判断题11.事件…...

Python视频处理:噪声矩阵与并行计算的完美融合

噪声级别对视频质量有显著的影响&#xff0c;主要体现在以下几个方面&#xff1a; 1. 视觉质量 低噪声级别&#xff1a;当噪声级别较低时&#xff0c;视频的视觉质量较好。噪声对图像细节的干扰较小&#xff0c;画面看起来较为清晰和自然。观众可以更容易地识别图像中的细节和…...

如何使用SparkSql

一、SparkSql的前世今生 Hive->Shark->Spark SQL 二、SparkSql依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.1.2</version> </dependency> 三、…...

YOLOv8实战人员跌倒检测

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对人员跌倒目标数据集进行训练和优化&#xff0c;该数据集包含丰富人员跌倒图像样…...

QT-TCP-server

为了实现高性能的TCP通讯&#xff0c;以下是一个基于Qt的示例&#xff0c;展示如何利用多个线程、非阻塞I/O、数据分块和自定义协议进行优化。该示例以TCP服务器和客户端的形式展示&#xff0c;能够承受高负载并实现快速数据传输。 高性能TCP Server示例 #include <QTcpSe…...

【STM32+QT项目】基于STM32与QT的智慧粮仓环境监测与管理系统设计(完整工程资料源码)

视频演示: 基于STM32与QT的智慧粮仓环境监测与管理系统设计 目录: 目录 视频演示: 目录: 前言:...

robot 仿真环境安装测试 [持续更新]

将持续更新各种robot simulation环境的安装过程. RLBench 安装CoppeliaSim、PyRep、RLBench git: https://github.com/stepjam/RLBench/tree/master (1)CoppeliaSim sudo gedit ~/.bashrc设置环境变量 export COPPELIASIM_ROOT=${HOME}/CoppeliaSim export LD_LIBRARY_…...

【FlutterDart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)

【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector&#xff5e;简单实现&#xff08;10 /100&#xff09; 【Flutter&Dart】 拖动边界线改变列宽并且有边界高亮和鼠标效果&#xff08;12 /100&#xff09; 上效果&#xff1a; 这个在知乎里找到的效果&…...

R语言的循环实现

以R语言的循环实现 引言 R语言作为一种强大的统计分析和数据可视化工具&#xff0c;广泛应用于数据科学、统计学和机器学习等领域。在R语言中&#xff0c;循环是一个基本的控制结构&#xff0c;用于重复执行一段代码。循环不仅可以提高代码的可读性&#xff0c;还可以方便地处…...

Web应用安全-漏洞扫描器设计与实现

摘 要 随着Web2.0、社交网络、微博等一系列新型的互联网产品的诞生&#xff0c;基于Web环境的互联网应用越来越广泛&#xff0c;企业信息化的过程中各种应用都架设在Web平台上。Web应用的迅速发展也引起黑客们的强烈关注&#xff0c;接踵而至的就是Web安全威胁的凸显&#xff…...

视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…...

【已解决】如何让容器内的应用程序使用代理?

首先&#xff0c;按照这种配置方法&#xff0c;即通过在 /etc/systemd/system/docker.service.d/http-proxy.conf 中设置代理&#xff0c;它只会影响 Docker 守护进程本身&#xff0c;并不会自动影响 Docker 容器内部的软件或容器中的网络行为。 这意味着&#xff1a; Docker …...

终极指南:东南大学论文模板的完整解决方案,高效完成毕业论文格式排版

终极指南&#xff1a;东南大学论文模板的完整解决方案&#xff0c;高效完成毕业论文格式排版 【免费下载链接】SEUThesis 项目地址: https://gitcode.com/gh_mirrors/seu/SEUThesis SEUThesis是东南大学官方认证的论文模板库&#xff0c;为本科生、硕士生和博士生提供一…...

Go语言如何做IP白名单_Go语言IP白名单过滤教程【干货】

应预解析白名单为*net.IPNet切片并用Contains校验&#xff0c;结合可信代理链解析X-Forwarded-For获取真实IP&#xff0c;避免字符串匹配、DNS查询及未标准化IP导致的误判。Go 里怎么快速判断请求 IP 是否在白名单中直接用 net.ParseIP strings.Contains 或切片遍历&#xff1…...

告别荧光干扰!用Python的AirPLS算法搞定拉曼光谱基线矫正(附完整代码)

告别荧光干扰&#xff01;用Python的AirPLS算法搞定拉曼光谱基线矫正&#xff08;附完整代码&#xff09; 拉曼光谱分析中&#xff0c;荧光背景干扰就像阳光下的阴影&#xff0c;总是让研究者头疼不已。想象一下&#xff0c;当你精心准备的样品在激光照射下&#xff0c;那些本…...

Goby 漏洞预警|山石网科 WAF /captcha 命令执行漏洞深度分析与防护策略【附复现步骤】

1. 山石网科WAF命令执行漏洞深度解析 最近安全圈曝出一个高危漏洞——山石网科WAF的/captcha接口存在命令执行漏洞。作为一款企业级Web应用防火墙&#xff0c;这个漏洞意味着攻击者可能直接绕过防护&#xff0c;在服务器上执行任意命令。我第一时间用Goby进行了复现测试&#x…...

不止于测距:用蓝桥杯开发板DIY一个简易超声波倒车雷达(含蜂鸣器报警)

从测距到实战&#xff1a;蓝桥杯开发板打造智能超声波雷达系统 第一次倒车时听到蜂鸣器急促的"滴滴"声&#xff0c;我意识到这个简单的超声波模块能做的远不止显示数字。作为参加过蓝桥杯的电子爱好者&#xff0c;我们手头的开发板其实蕴藏着解决实际问题的潜力——…...

hyn/multi-tenant性能优化技巧:缓存策略与连接管理

hyn/multi-tenant性能优化技巧&#xff1a;缓存策略与连接管理 【免费下载链接】multi-tenant Run multiple websites using the same Laravel installation while keeping tenant specific data separated for fully independent multi-domain setups, previously github.com/…...

Qwen3-ASR-1.7B在Ubuntu20.04上的Docker化部署教程

Qwen3-ASR-1.7B在Ubuntu20.04上的Docker化部署教程 1. 引言 语音识别技术正在改变我们与设备交互的方式&#xff0c;而Qwen3-ASR-1.7B作为一款支持52种语言和方言的开源模型&#xff0c;为开发者提供了强大的语音转文字能力。今天&#xff0c;我将带你一步步在Ubuntu 20.04系…...

Visual Studio Code远程开发:无缝调试云端Pixel Dimension Fissioner

Visual Studio Code远程开发&#xff1a;无缝调试云端Pixel Dimension Fissioner 1. 为什么需要远程开发 想象一下这样的场景&#xff1a;你的笔记本性能有限&#xff0c;但需要运行一个计算密集型的Pixel Dimension Fissioner项目。传统做法可能是把代码上传到服务器&#x…...

羊毛鞋履品牌Allbirds仅3900万美元出售全部资产

羊毛运动鞋品牌Allbirds已同意将其全部资产和知识产权以3900万美元的价格出售给American Exchange Group&#xff0c;而这一价格仅约为其2021年IPO时筹集资金3.48亿美元的十分之一&#xff0c;更是其交易首日时超过40亿美元估值的一小部分。Allbirds曾一度成为硅谷人群的非正式…...

Magnum音频处理框架终极指南:OpenAL集成与沉浸式3D音效实现

Magnum音频处理框架终极指南&#xff1a;OpenAL集成与沉浸式3D音效实现 【免费下载链接】magnum Lightweight and modular C11 graphics middleware for games and data visualization 项目地址: https://gitcode.com/gh_mirrors/mag/magnum Magnum是一个轻量级、模块化…...