环境:
- Java 17
- Tomcat 9.x
- Maven 3.8.4(带有 Codehaus Cargo 插件)
- Gitlab CI/CD
我正在寻找任何人将他们所有的第 3 方库分离到 catalina lib(或通过扩展 catalina.properties 'common-loader' 指定的自定义目录)以便应用程序的 war 文件可以小得多的输入。
背景:我们有五个网络应用程序,它们共享大约 100 个第三方库,这些库的大小加起来约为 100MB。虽然应用程序可能有一些独特的依赖关系,但第三个依赖关系的重叠超过 90%。
我们的代码本身只有 5-15MB,并且与我们自己的代码相比,依赖项不会经常更改。所以我们的 CI/CD 中每天/每周都有很多不必要的文件传输和解包。
我想改善部署启动时间和远程部署时间(通过货物),因为远程部署 ~115MB 到集群似乎不必要地耗时< 15% of the code changes on a typical sprint.
我的计划是:
- 创建一个新的 git 项目并将当前在父 pom 中的所有依赖项移动到新项目
- 更新父 pom 以将新项目引用为依赖项,但设置提供的范围,以便这些 jar 不包含在 war 文件中。
- 写一个 maven 脚本把所有的 3rd party jar 打包成一个 fat jar(不是 shaded jar)
- 编写 sftp/shell 脚本(或使用 Maven ssh 插件)将 fat jar 发布到生产和登台服务器到 $(catalina)/lib 或自定义目录(添加到 common-loader 属性),只要库有版本或需要发布的错误更新。
- 现有的 maven cargo 任务应该运行得更快;只需传输 10-15MB。而且我怀疑 Tomcat 也应该更快地部署更新的 war 文件,因为要解压的东西要少得多。
任何人都有这样做的经验或有任何提示/陷阱需要关注?