如何减小微服务项目单个WAR包体积以缩减总部署大小
微服务WAR包体积精简可行方案
- 排查移除未使用依赖:Maven项目执行
mvn dependency:analyze、Gradle项目执行gradle dependencies扫描未实际调用的依赖包,优先替换引入全量组件的重量级starter为仅包含所需能力的细分依赖,避免引入不需要的额外组件。 - 剔除重复传递依赖:统一管理项目全局公共依赖的版本,在构建配置中明确排除第三方包传递引入的重复依赖,避免同一依赖的多个版本同时打入WAR包。
- 精简内置资源文件:打包时排除测试资源、开发环境配置、说明文档等非生产必要文件,静态资源(图片、CSS、JS等)提前执行压缩处理后再打入包内。
- 公共依赖外置共享:如果85个微服务技术栈统一,该方案收益最高:将所有服务共用的核心依赖(Spring Boot核心包、Servlet API、通用工具库、日志框架等)提取到部署容器的公共lib目录,容器化部署场景可将公共依赖提前打入统一基础镜像,业务WAR包仅需打入自身独有的业务代码和专属依赖,单个WAR包体积可压缩至几MB级别。
- 开启构建压缩配置:调整maven-war-plugin或Gradle war插件的压缩等级参数,提升WAR包的压缩率;如果服务不涉及JSP使用,可排除打包时默认引入的JSP支持相关组件。
- 调整部署形态:技术栈允许的前提下,可将传统WAR包改为thin JAR形态打包,或使用GraalVM编译为原生镜像,最终产物体积会远小于传统WAR包,同时还能提升服务启动速度。
内容的提问来源于stack exchange,提问作者badaBingBing
相关产品推荐
相关产品推荐

