如何将共用第三方Jar外置Tomcat 缩小War包并优化CI/CD部署?
第三方依赖分离至Tomcat公共目录的优化求助
环境
- Java 17
- Tomcat 9.x
- Maven 3.8.4(搭配Codehaus Cargo插件)
- Gitlab CI/CD
背景与优化目标
我们有5个Web应用,共用约100个第三方库(总大小约100MB),第三方依赖重叠率超90%,仅各应用有少量独有依赖。自研代码仅5-15MB,且依赖更新频率远低于自研代码,导致CI/CD中存在大量不必要的文件传输与解压操作。
我希望将所有第三方库分离至catalina/lib(或通过扩展catalina.properties的common-loader指定的自定义目录),以此大幅缩小应用War包体积,优化部署启动时间及远程部署时间(通过Cargo)——典型迭代中仅15%以下的代码变更,却要远程部署约115MB的包到集群,耗时过长。
我的优化计划
- 新建Git项目,将当前父POM中的所有依赖迁移至该项目
- 更新父POM,将新项目作为依赖引入,并设置
scope为provided,避免这些Jar被打包进War - 编写Maven脚本,将所有第三方Jar打包为fat jar(非shaded jar)
- 编写SFTP/Shell脚本(或使用Maven SSH插件),当库版本更新或需修复Bug时,将fat jar发布到生产及预发布服务器的
$(catalina)/lib目录或自定义目录(已添加至common-loader属性) - 现有Maven Cargo任务将大幅提速,仅需传输10-15MB;同时Tomcat部署更新后的War包也会更快,需解压的内容大幅减少
求助问题
请问有过此类实操经验的开发者吗?能否提供相关建议或需注意的陷阱?
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

