当前位置: 首页 > 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

http://www.lryc.cn/news/518002.html

相关文章:

  • JavaScript 延迟加载的方法
  • xrdp连接闪退情况之一
  • 数据分析思维(八):分析方法——RFM分析方法
  • WebRTC 在视频联网平台中的应用:开启实时通信新篇章
  • Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开
  • oracle闪回恢复数据:(闪回查询,闪回表,闪回库,回收站恢复)
  • C语言——结构体,位段,枚举和联合
  • 期末概率论总结提纲(仅适用于本校,看文中说明)
  • Python视频处理:噪声矩阵与并行计算的完美融合
  • 如何使用SparkSql
  • YOLOv8实战人员跌倒检测
  • QT-TCP-server
  • 【STM32+QT项目】基于STM32与QT的智慧粮仓环境监测与管理系统设计(完整工程资料源码)
  • robot 仿真环境安装测试 [持续更新]
  • 【FlutterDart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)
  • R语言的循环实现
  • Web应用安全-漏洞扫描器设计与实现
  • 视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等
  • 【已解决】如何让容器内的应用程序使用代理?
  • DC/AC并网逆变器模型与仿真MATLAB
  • P10424 [蓝桥杯 2024 省 B] 好数
  • 【Word_笔记】Word的修订模式内容改为颜色标记
  • oracle位运算、左移右移、标签算法等
  • spring boot学习第二十三篇:Spring Boot集成RocketMQ
  • 去掉el-table中自带的边框线
  • C语言gdb调试
  • Spring项目创建流程及配置文件bean标签参数简介
  • reactor中的并发
  • 太速科技-418-基于AD9361 +ZYNQ7020 的软件无线电 SDR 套件
  • 监控易:一体化智能运维的扩展性优势深度解析