You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让3个独立Spring Boot项目共享公共依赖以减小WAR包体积?

Spring Boot多项目公共依赖瘦身方案

方案1:纯依赖管理模块(不生成JAR包)

新建一个仅做依赖版本管控的项目(比如命名为common-dependencies),无需编写业务代码,仅通过构建工具统一管理公共依赖的版本和坐标:

  • Maven配置示例:将项目打包类型设为pom,通过<dependencyManagement>块集中声明所有公共依赖的版本,子项目只需引用该模块,无需重复写版本号,且不会将公共依赖打包进自身WAR包。
<!-- common-dependencies的pom.xml -->
<groupId>com.yourcompany</groupId>
<artifactId>common-dependencies</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging> <!-- 核心:仅生成pom文件,不产出JAR -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.7.15</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.5</version>
    </dependency>
    <!-- 其他公共依赖按需添加 -->
  </dependencies>
</dependencyManagement>
  • 子项目引用方式:在子项目的pom.xml中把该模块设为父项目,直接声明需要的依赖即可,无需指定版本:
<!-- 子项目pom.xml -->
<parent>
  <groupId>com.yourcompany</groupId>
  <artifactId>common-dependencies</artifactId>
  <version>1.0.0</version>
</parent>
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

方案2:容器级依赖共享(彻底剥离公共依赖)

如果要完全让子项目WAR包不包含公共依赖,可结合应用服务器的共享库机制:

  • 将所有公共依赖的JAR包放到应用服务器的全局lib目录(比如Tomcat的CATALINA_HOME/lib)。
  • 在子项目中把公共依赖的scope设为provided,构建工具会自动排除这些依赖,WAR包仅保留业务代码和项目专属依赖。
  • 配合方案1的依赖管理模块,确保服务器上的JAR版本与子项目声明一致,避免版本冲突。

方案3:Spring Boot Thin Launcher特性

利用Spring Boot的thin launcher插件,让子项目打包时仅包含自身业务代码和引导文件,公共依赖在运行时从指定目录(本地或私有仓库)加载:

  • 插件会自动识别依赖管理模块中声明的版本,运行时共享同一份公共依赖文件,彻底避免WAR包冗余。

注意事项

  • 依赖管理模块需发布到公司私有仓库(如Nexus),确保团队成员可正常拉取。
  • 容器共享依赖时,所有子项目必须使用统一版本的公共依赖,防止类加载冲突。

内容的提问来源于stack exchange,提问作者Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:47:17