本文档介绍了 Spring Framework 仓库中基于 Gradle 的构建基础设施。它解释了多模块构建结构、自定义构建插件、依赖管理以及规范框架如何编译、测试和打包的构建约定。
有关项目配置和贡献指南的信息,请参阅项目配置和贡献。
Spring Framework 使用一套复杂的 Gradle 构建系统,旨在管理超过 25 个具有复杂相互依赖关系的模块。该构建系统提供统一的约定、依赖管理和自定义工具,以确保所有模块的一致编译、测试和打包。
该构建被组织为一个 Gradle 多项目构建,具有不同的模块类型和职责。
来源: build.gradle1-99 settings.gradle1-53 gradle/spring-module.gradle1-127
该构建通过命名约定和配置来区分不同类型的模块
| 模块类型 | 模式 | 目的 |
|---|---|---|
| 框架模块 | spring-* | 核心 Spring Framework 功能 |
| 基础设施 | framework-* | 构建和文档支持 |
| 测试集成 | integration-tests | 跨模块集成测试 |
来源: build.gradle13-14 settings.gradle5-31
构建系统采用分层配置方法,以确保一致性,同时允许模块特定的自定义。
来源: build.gradle96-98 gradle/spring-module.gradle1-127 framework-platform/framework-platform.gradle1-153
buildSrc 目录包含实现 Spring Framework 特定构建逻辑的自定义 Gradle 插件。
来源: buildSrc/src/main/java/org/springframework/build/ConventionsPlugin.java38-50 buildSrc/src/main/java/org/springframework/build/JavaConventions.java38-137 buildSrc/src/main/java/org/springframework/build/TestConventions.java41-89
来源: buildSrc/src/main/java/org/springframework/build/optional/OptionalDependenciesPlugin.java34-56 buildSrc/src/main/java/org/springframework/build/multirelease/MultiReleaseJarPlugin.java39-61 buildSrc/src/main/java/org/springframework/build/hint/RuntimeHintsAgentPlugin.java42-101
该框架通过 framework-platform 模块采用集中式依赖管理策略。
来源: framework-platform/framework-platform.gradle9-25 framework-platform/framework-platform.gradle26-151 build.gradle48-50
该平台管理多个类别的依赖项
| 类别 | 示例 | 数量 |
|---|---|---|
| 外部 BOM | Jackson, Reactor, JUnit, Netty | 15+ |
| 单独约束 | Jakarta API、测试框架、数据访问 | 150+ |
| 框架模块 | 内部项目依赖 | 25+ |
来源: framework-platform/framework-platform.gradle10-24 framework-platform/framework-platform.gradle26-151
每个 Spring 模块都通过 spring-module.gradle 脚本继承通用构建约定。
来源: gradle/spring-module.gradle1-8 gradle/spring-module.gradle11-16
来源: gradle/spring-module.gradle47-60 spring-core/spring-core.gradle114-126
构建系统强制所有模块使用一致的 Java 编译设置。
来源: buildSrc/src/main/java/org/springframework/build/JavaConventions.java49-55 buildSrc/src/main/java/org/springframework/build/JavaConventions.java57-74 buildSrc/src/main/java/org/springframework/build/JavaConventions.java99-117
构建系统支持为需要特定 Java 版本实现的模块创建多版本 JAR。
来源: buildSrc/src/main/java/org/springframework/build/multirelease/MultiReleaseExtension.java62-70 spring-core/spring-core.gradle13-15
构建系统提供全面的测试支持,并针对不同测试类型提供专门配置。
来源: buildSrc/src/main/java/org/springframework/build/TestConventions.java55-75 buildSrc/src/main/java/org/springframework/build/hint/RuntimeHintsAgentPlugin.java56-66 buildSrc/src/main/java/org/springframework/build/TestConventions.java77-83
构建系统定义了几个关键任务类别,用于构建生命周期的不同方面。
| 任务类别 | 目的 | 关键任务 |
|---|---|---|
| 编译 | 源代码编译 | compileJava, compileTestJava |
| 测试 | 测试执行 | test, runtimeHintsTest |
| 质量 | 代码质量 | checkstyle, architecture |
| 打包 | 制品创建 | jar, sourcesJar, javadocJar |
| 文档 | API 文档 | javadoc, dokkaHtml |
| 发布 | 制品发布 | publish, publishToMavenLocal |
来源: gradle/spring-module.gradle100-111 gradle/spring-module.gradle113-121 buildSrc/src/main/java/org/springframework/build/hint/RuntimeHintsAgentPlugin.java56-67
该构建使用 Gradle Wrapper 来确保不同开发环境之间的一致构建。
来源: gradle/wrapper/gradle-wrapper.properties1-8 gradlew1-252 gradlew.bat1-95