新闻详情

新闻详情

首页 / 资讯中心 / 详情

Spring Boot打出来的jar动不动80MB?5层优化瘦到20MB,CI快3倍

发布时间:2026/10/1 11:30:05来源:尧图网络
Spring Boot打出来的jar动不动80MB?5层优化瘦到20MB,CI快3倍
上周把多Agent工程发出去有同学问我本地怎么部署。我顺手mvn package打了个包一看——87MB。推镜像传半天扔服务器scp也半天改一行代码整个包重传一遍CI红灯一半时间在传包。很多人打完jar就直接扔服务器从来没想过它能瘦身。其实一个Spring Boot fat jar默认把所有依赖、启动器、你自己的代码全塞一起80MB里真正频繁变动的业务代码可能不到1MB。优化不是玄学是把不变的和常变的分开再把多余的扔掉。今天把我项目里用了三年的五层优化全讲一遍——不管你是传统服务器java -jar还是Docker部署都用得上。第1层先诊断别瞎优化上来就调参数是瞎搞。先看清楚你的jar到底谁胖# 按大小排序看Top20 unzip -l target/*.jar | sort -rn | head -20 # 专门看第三方依赖哪个最胖 unzip -l target/*.jar | grep BOOT-INF/lib | sort -rn | head -20我见过太多案例一个PDFBox、一个字体包、一个SDK单独就20~30MB。先砍大头比什么都管用。第2层依赖瘦身——把不该打的扔出去# 完整依赖树找重复和冲突 mvn dependency:tree # 揪出你以为用了、其实代码里没引用的声明依赖 mvn dependency:analyze三个必查功能重叠的库别同时留okhttp和httpclient、fastjson和jackson大依赖PDF/Office/字体确认真的在用不用就删testscope的本来就不进jar别手滑改成compile。这一层做完经常直接瘦10~20MB。第3层分层打包——Docker和直接部署都能用这是最关键的一招。Spring Boot 2.3默认开启分层把jar拆成四块dependencies/ ← 第三方依赖几乎不变 spring-boot-loader/ ← 启动器不变 snapshot-dependencies/ ← SNAPSHOT包 application/ ← 你自己的业务代码每次都变pom里确认一下plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration layersenabledtrue/enabled/layers /configuration /plugin解包命令本地和服务器都能跑mvn clean package -DskipTests java -Djarmodelayertools -jar target/app.jar list # 看有哪几层 java -Djarmodelayertools -jar target/app.jar extract # 解出四个目录分层的价值在哪不是只能给Docker用。传统部署里你也可以把解出来的四个目录固定在服务器上以后每次发版只传application/那几百KB不用整个80MB包重传——scp和CI时间直接砍90%。当然如果你团队就是习惯scp一个整jar上去跑那分层的主要价值在Docker缓存和传包体积传统单机部署不折腾分层也完全没问题别为了分层而分层。第4层按部署方式选方案A. 传统服务器直接java -jar解包后目录结构固定启动用JarLauncher# 以后发版只替换 application/ 目录不用重传依赖 nohup java org.springframework.boot.loader.launch.JarLauncher app.log 21 包路径别抄错Spring Boot 3.x 是org.springframework.boot.loader.launch.JarLauncher2.x 是org.springframework.boot.loader.JarLauncher。B. Docker部署利用分层做缓存——依赖层不变化Docker就不重建FROM openjdk:17-slim AS builder WORKDIR app COPY target/app.jar app.jar RUN java -Djarmodelayertools -jar app.jar extract FROM openjdk:17-slim WORKDIR app COPY --frombuilder app/dependencies/ ./ COPY --frombuilder app/spring-boot-loader/ ./ COPY --frombuilder app/snapshot-dependencies/ ./ COPY --frombuilder app/application/ ./ ENTRYPOINT [java,org.springframework.boot.loader.launch.JarLauncher]顺序很关键最稳定的依赖层放前面业务代码application/放最后——改一行代码Docker只重建最后一层秒级构建。第5层运行时再砍一刀——jlink 瘦JRE基础镜像openjdk:17-slim就有40MB用jlink只打包你用到的Java模块能压到30MB以内。先别急着手写模块清单让工具帮你分析——手写几乎一定会漏模块启动报NoClassDefFoundError# 让jdeps自动分析这个jar依赖哪些模块 jdeps --print-module-deps --ignore-missing-deps target/app.jar # 输出类似java.base,java.desktop,java.management,...把输出直接喂给jlinkjlink \ --add-modules $(jdeps --print-module-deps --ignore-missing-deps target/app.jar) \ --output my-jre \ --strip-debug --no-man-pages --no-header-files --compress2几个老牌库Netty等还依赖jdk.unsupported如果jdeps没列出但启动报模块找不到手动补进去。附赠冷启动再快一点如果你是Serverless、频繁重启、或者要快速弹性扩容在application.yml开懒加载Bean按需初始化冷启动时间能再压一截spring: main: lazy-initialization: true注意懒加载会把初始化成本挪到首个请求长期常驻的核心服务别开首屏响应会变慢。最后一张速查表mvn clean package -DskipTests # 打fat jar unzip -l target/*.jar | sort -rn | head -20 # 看谁最胖 mvn dependency:tree mvn dependency:analyze # 依赖体检 java -Djarmodelayertools -jar target/app.jar extract # 分层解包 jdeps --print-module-deps --ignore-missing-deps target/app.jar # 分析模块五层做完80MB的包通常能压到20MB以内CI构建从几分钟变几十秒。优化的本质不是压参数是把不变的和常变的分开、把多余的删掉。落地资源推荐打好包要部署到服务器2核4G轻量服务器跑Spring Boot完全够新用户首年特惠性价比很高点文末「阅读原文」直达活动无需求直接忽略。领取优化模板包关注图片上水印即Java-AI工程师整理了一份可直接复制的配置pom分层配置、完整Dockerfile、jdepsjlink命令、分层部署命令打出【jar优化】 即可对着抄就行。下期预告下一篇回到AI主线,继续来生成的实战干货本文属于「JavaAgent实战」合集
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

自动化测试ROI量化框架:从成本建模到实战落地方法 2026/10/1 13:04:00

自动化测试ROI量化框架:从成本建模到实战落地方法

很多团队在推自动化测试的时候,都会碰到同一个灵魂拷问:这活儿到底值不值?老板问起来,你说“能提升效率、保障质量”,这套话连自己都说服不了。我在这行待了十多年,见过不少团队自动化测试跑得热热闹闹&…

阅读更多 →
CIOE2026展台交换机选型与配置实战:VLAN隔离、光衰排查与应急恢复 2026/10/1 13:03:54

CIOE2026展台交换机选型与配置实战:VLAN隔离、光衰排查与应急恢复

1. 从CIOE2026展台需求倒推:交换机选型到底在选什么CIOE这类展会现场的展台网络,和普通办公室、机房完全不是一回事。展台面积不大,但设备密度极高——演示终端、视频播放器、直播推流机、互动大屏、扫码枪、临时接入的笔记本,全挤…

阅读更多 →
Linux 跑 Windows 应用:Wine、FEX-Emu 与 DXMT 兼容层实战指南 2026/10/1 13:03:47

Linux 跑 Windows 应用:Wine、FEX-Emu 与 DXMT 兼容层实战指南

1. 项目缘起:为什么要在 Linux 上折腾 Windows 应用兼容层第一次看到 "Madeira" 这个项目名,很多人会以为是某个旅游地或者饮料品牌。但在我们这群长期混迹于 Linux 桌面环境、又不得不偶尔跑几个 Windows 专属工具的人眼里,Madeir…

阅读更多 →
大模型训练到部署全流程:SFT、PPO、剪枝量化与OpenCompass评测实践 2026/10/1 13:03:47

大模型训练到部署全流程:SFT、PPO、剪枝量化与OpenCompass评测实践

很多做模型训练和部署的朋友应该都有同感:大模型这个链条太长太碎了。前面要微调,微调完要对齐,对齐之后要压缩,压缩完还要评估,每个环节用的工具都不一样,环境配置就能折腾一整天。我最早做一个小模型的SF…

阅读更多 →
Python掌纹识别实战:ROI提取、Gabor+LBP特征与SVM分类全流程 2026/10/1 13:03:47

Python掌纹识别实战:ROI提取、Gabor+LBP特征与SVM分类全流程

简介:这是一套面向毕业设计、期末大作业与课程设计场景的Python掌纹特征提取与分类完整项目,基于ResNet与SIFT两条技术路线实现图像特征提取,并完成分类识别任务;代码含详尽注释且经过严格调试,适合高校学生快速部署、…

阅读更多 →
Windows 10 LTSC 2021:企业级稳定系统的归零重启方案 2026/10/1 13:03:47

Windows 10 LTSC 2021:企业级稳定系统的归零重启方案

1. 为什么重装 Windows 10 LTSC 2021 是企业级设备的“归零重启”操作 我干系统部署这行十多年,从 XP SP3 到 Win11 23H2,经手过上万台办公终端、产线工控机、医疗影像工作站和金融柜面设备。但凡遇到“这台电脑越用越卡、后台进程杀不完、更新后蓝屏三连…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉