如何创建一个 jar 的 jar,只包括 war 文件之外所需的第 3 方库

问题描述 投票:0回答:0

环境:

  • 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.

我的计划是:

  1. 创建一个新的 git 项目并将当前在父 pom 中的所有依赖项移动到新项目
  2. 更新父 pom 以将新项目引用为依赖项,但设置提供的范围,以便这些 jar 不包含在 war 文件中。
  3. 写一个 maven 脚本把所有的 3rd party jar 打包成一个 fat jar(不是 shaded jar)
  4. 编写 sftp/shell 脚本(或使用 Maven ssh 插件)将 fat jar 发布到生产和登台服务器到 $(catalina)/lib 或自定义目录(添加到 common-loader 属性),只要库有版本或需要发布的错误更新。
  5. 现有的 maven cargo 任务应该运行得更快;只需传输 10-15MB。而且我怀疑 Tomcat 也应该更快地部署更新的 war 文件,因为要解压的东西要少得多。

任何人都有这样做的经验或有任何提示/陷阱需要关注?

maven tomcat maven-assembly-plugin maven-cargo cargo-maven2-plugin
© www.soinside.com 2019 - 2024. All rights reserved.