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

Spring Boot多模块项目配置:根项目用Gradle、模块用Maven是否可行?

Spring Boot多模块项目配置指导与混合构建方案说明

一、Spring Boot多模块项目基础配置指导

1. 标准项目结构

推荐采用「根父项目 + 功能子模块」的分层结构,示例如下:

root-project/
├── 根项目配置文件(build.gradle/pom.xml)
├── settings.gradle(仅Gradle需要)
├── common/          # 通用工具、实体类等公共模块
│   ├── 子模块配置文件
├── core/            # 业务核心逻辑模块
│   ├── 子模块配置文件
├── web/             # Spring Boot启动模块(仅一个子模块需配置启动类)
│   ├── 子模块配置文件
│   └── src/main/java/com/example/web/WebApplication.java

2. Gradle配置方式

根项目build.gradle

统一管控依赖版本与插件:

plugins {
    id 'org.springframework.boot' version '3.2.0' apply false
    id 'io.spring.dependency-management' version '1.1.4' apply false
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'io.spring.dependency-management'

    group = 'com.example'
    version = '0.0.1-SNAPSHOT'

    repositories {
        mavenCentral()
    }

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

根项目settings.gradle

声明要包含的子模块:

rootProject.name = 'root-project'
include ':common', ':core', ':web'

启动模块(web)build.gradle

启用Spring Boot插件并依赖其他子模块:

plugins {
    id 'org.springframework.boot'
}

dependencies {
    implementation project(':common')
    implementation project(':core')
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

3. Maven配置方式

根项目pom.xml

作为父项目统一管控依赖与模块:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>root-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>common</module>
        <module>core</module>
        <module>web</module>
    </modules>
    <properties>
        <java.version>17</java.version>
    </properties>
</project>

启动模块(web)pom.xml

依赖其他子模块并配置Spring Boot插件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>root-project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>web</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>core</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

二、根项目Gradle + 子模块Maven的混合架构可行性

1. 可行性结论

可以实现,但存在明显限制与较高维护成本,非特殊业务需求不推荐采用

2. 实现步骤

项目结构示例

root-gradle/
├── build.gradle
├── settings.gradle
├── maven-common/       # Maven子模块
│   ├── pom.xml
├── maven-core/         # Maven子模块
│   ├── pom.xml
├── gradle-web/         # Gradle启动模块
│   ├── build.gradle

根项目settings.gradle

导入Maven子模块并声明Gradle子模块:

rootProject.name = 'root-gradle'
// 导入Maven子模块
includeBuild('maven-common')
includeBuild('maven-core')
// 声明Gradle子模块
include ':gradle-web'

根项目build.gradle

统一管控所有模块的依赖版本:

plugins {
    id 'org.springframework.boot' version '3.2.0' apply false
    id 'io.spring.dependency-management' version '1.1.4' apply false
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'io.spring.dependency-management'

    group = 'com.example'
    version = '0.0.1-SNAPSHOT'

    repositories {
        mavenCentral()
    }

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

// 对导入的Maven模块应用相同的依赖管理规则
includeBuilds.each { build ->
    build.dependencyManagement {
        imports {
            mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
        }
    }
}

Gradle启动模块(gradle-web)build.gradle

依赖Maven子模块:

plugins {
    id 'org.springframework.boot'
}

dependencies {
    implementation 'com.example:maven-common:0.0.1-SNAPSHOT'
    implementation 'com.example:maven-core:0.0.1-SNAPSHOT'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

3. 关键限制与注意事项

  • 依赖解析差异:Gradle与Maven的依赖解析逻辑存在细微差别,需通过Spring Boot BOM严格管控版本,避免依赖冲突。
  • 构建流程复杂:整体构建需用Gradle命令(./gradlew build),Maven子模块单独构建时需先执行mvn clean install安装到本地仓库,否则Gradle无法获取依赖。
  • 工具适配成本:团队需同时掌握两种构建工具的配置与调试,增加学习和维护负担。
  • 插件兼容性:部分Spring Boot插件在Gradle与Maven上的配置逻辑不同,混合使用可能需要额外适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:45:33