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

Spring Boot多模块项目中跨模块引用类且隔离依赖的方法

解决方案

核心思路是把两个模块共享的代码(比如Entity类)抽成独立的纯基础库模块,让A、B模块各自依赖这个基础模块,从而实现依赖隔离。

步骤1:新建Common基础模块

  • 创建一个无启动类的普通Java模块(命名比如module-Common),不要包含xxxApplication.java
  • 将A、B模块中需要互相引用的共享代码(Entity、DTO、通用工具类等)迁移到该模块
  • 配置该模块的build.gradle,只保留必要的基础依赖(比如如果Entity用了JPA注解,就加spring-boot-starter-data-jpa),完全不添加业务或安全类依赖

示例Common模块的build.gradle关键配置:

plugins {
    id 'java'
    id 'io.spring.dependency-management' version '1.1.4'
}

group 'com.example'
version '1.0-SNAPSHOT'

dependencyManagement {
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    }
}

dependencies {
    // 仅添加共享代码需要的基础依赖,比如JPA支持
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    // 测试依赖按需添加
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

步骤2:调整A、B模块的依赖配置

  • 移除A模块中原来的implementation project(':module-B'),替换为:
    implementation project(':module-Common')
    
  • 在B模块的build.gradle中添加对Common模块的依赖:
    implementation project(':module-Common')
    
  • B模块的安全组件依赖(比如spring-boot-starter-security)保留在自身的build.gradle中,不会被A模块引入

步骤3:验证依赖隔离

  • 执行Gradle命令查看A模块的依赖树,确认无B模块的专属依赖:
    ./gradlew module-A:dependencies
    
  • 查看B模块的依赖树,确认安全组件依赖存在且Common模块依赖正常:
    ./gradlew module-B:dependencies
    

关键说明

原来使用implementation project(':module-B')会导致依赖传递,是因为Gradle的implementation配置会将目标模块的所有依赖一并引入。而抽离Common模块后,该模块仅包含共享代码和必要基础依赖,A、B模块各自依赖Common,彼此的业务依赖完全隔离,不会互相污染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:01:13