Skip to content

Spring Boot 构建系统

概述

构建系统是 Spring Boot 项目开发的基础设施,选择合适的构建工具对项目的成功至关重要。Spring Boot 强烈推荐使用支持依赖管理的构建系统,它能够从 Maven 中央仓库获取工件。

IMPORTANT

强烈建议选择 Maven 或 Gradle 作为构建工具。

依赖管理

Spring Boot 的依赖管理是其核心特性之一,它为每个版本提供了精心策划的依赖列表。

版本管理机制

NOTE

Spring Boot 管理所有支持的依赖版本,开发者无需在构建配置中指定这些依赖的版本号。

依赖管理的优势:

  1. 自动版本控制:Spring Boot 升级时,相关依赖也会以一致的方式升级
  2. 兼容性保证:所有依赖都经过测试,确保相互兼容
  3. 简化配置:减少版本冲突和配置复杂度

TIP

如果需要,你仍然可以指定版本号来覆盖 Spring Boot 的推荐版本。

BOM(Bills of Materials)

Spring Boot 提供了 spring-boot-dependencies BOM,这是一个标准的物料清单,包含:

  • 所有可与 Spring Boot 配合使用的 Spring 模块
  • 精选的第三方库列表
  • 适用于 Maven 和 Gradle

WARNING

每个 Spring Boot 版本都关联特定的 Spring Framework 基础版本。强烈建议不要手动指定 Spring Framework 的版本。

Maven 构建

Maven 是 Spring Boot 最常用的构建工具之一,提供了完整的插件支持。

实际业务场景示例

假设我们要创建一个电商系统的用户服务,使用 Maven 构建:

kotlin
// UserController.kt - 用户控制器
@RestController
@RequestMapping("/api/users")
class UserController(
    private val userService: UserService
) {
    @GetMapping("/{id}")
    fun getUser(@PathVariable id: Long): ResponseEntity<UserDTO> {
        val user = userService.findById(id)
        return ResponseEntity.ok(user)
    }

    @PostMapping
    fun createUser(@RequestBody @Valid userRequest: CreateUserRequest): ResponseEntity<UserDTO> {
        val user = userService.createUser(userRequest)
        return ResponseEntity.status(HttpStatus.CREATED).body(user)
    }
}

对应的 Maven 配置:

xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.0</version>
        <relativePath/>
    </parent>

    <groupId>com.ecommerce</groupId>
    <artifactId>user-service</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <properties>
        <kotlin.version>1.9.10</kotlin.version>
    </properties>

    <dependencies>
        <!-- Spring Boot Web Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot Data JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- Kotlin 支持 -->
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-reflect</artifactId>
        </dependency>
    </dependencies>
</project>
kotlin
@SpringBootApplication
class UserServiceApplication

fun main(args: Array<String>) {
    runApplication<UserServiceApplication>(*args)
}

Maven 插件功能

Maven 插件提供了丰富的功能:

  • 应用运行mvn spring-boot:run
  • 打包部署mvn spring-boot:build-image
  • 测试执行mvn test

Gradle 构建

Gradle 提供了更现代化的构建体验,特别适合 Kotlin 项目。

Kotlin DSL 配置示例

kotlin
// build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "3.5.0"
    id("io.spring.dependency-management") version "1.1.4"
    kotlin("jvm") version "1.9.10"
    kotlin("plugin.spring") version "1.9.10"
    kotlin("plugin.jpa") version "1.9.10"
}

group = "com.ecommerce"
version = "1.0.0"
java.sourceCompatibility = JavaVersion.VERSION_17

repositories {
    mavenCentral()
}

dependencies {
    // Spring Boot Starters
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-validation")

    // Kotlin 支持
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    // 数据库
    runtimeOnly("com.h2database:h2")

    // 测试
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "17"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

Gradle 任务优势

Ant 构建支持

虽然不推荐,但 Spring Boot 也支持 Apache Ant + Ivy 构建。

Ivy 依赖配置

xml
<!-- ivy.xml -->
<ivy-module version="2.0">
    <info organisation="org.springframework.boot" module="spring-boot-sample-ant" />
    <configurations>
        <conf name="compile" description="编译所需的所有内容" />
        <conf name="runtime" extends="compile" description="运行所需的所有内容" />
    </configurations>
    <dependencies>
        <dependency org="org.springframework.boot" name="spring-boot-starter"
            rev="${spring-boot.version}" conf="compile" />
    </dependencies>
</ivy-module>

Spring Boot Starters

Starters 是 Spring Boot 的核心特性之一,它们是一组便捷的依赖描述符。

Starters 的设计理念

主要应用 Starters

Web 开发相关

Starter用途业务场景
spring-boot-starter-webWeb 应用开发REST API、MVC 应用
spring-boot-starter-webflux响应式 Web 应用高并发、异步处理
spring-boot-starter-websocketWebSocket 支持实时通信、在线客服
spring-boot-starter-thymeleaf模板引擎服务端渲染页面

数据访问相关

Starter用途业务场景
spring-boot-starter-data-jpaJPA 数据访问关系型数据库操作
spring-boot-starter-data-mongodbMongoDB 支持文档数据库、内容管理
spring-boot-starter-data-redisRedis 缓存会话存储、缓存系统
spring-boot-starter-data-elasticsearch全文搜索商品搜索、日志分析

消息和集成

Starter用途业务场景
spring-boot-starter-amqpRabbitMQ 消息异步处理、解耦系统
spring-boot-starter-pulsarApache Pulsar大规模消息流处理
spring-boot-starter-integration系统集成企业应用集成

安全认证

Starter用途业务场景
spring-boot-starter-security基础安全用户认证授权
spring-boot-starter-oauth2-clientOAuth2 客户端第三方登录集成
spring-boot-starter-oauth2-resource-server资源服务器API 安全保护

技术替换 Starters

Spring Boot 还提供了用于替换特定技术组件的 Starters:

Web 服务器替换示例

kotlin
// 使用 Jetty 替换默认的 Tomcat
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web") {
        exclude(group = "org.springframework.boot", module = "spring-boot-starter-tomcat")
    }
    implementation("org.springframework.boot:spring-boot-starter-jetty")
}

命名规范

> **官方 Starters** 遵循 `spring-boot-starter-*` 命名模式,其中 `*` 是特定的应用类型。

> **第三方 Starters** 不应以 `spring-boot` 开头,通常采用 `项目名-spring-boot-starter` 格式。

示例:

  • 官方:spring-boot-starter-web
  • 第三方:mybatis-spring-boot-starter

最佳实践

1. 构建工具选择

2. 依赖管理策略

TIP

版本管理建议

  1. 优先使用 BOM:让 Spring Boot 管理版本
  2. 谨慎覆盖版本:只在必要时指定特定版本
  3. 定期升级:跟随 Spring Boot 版本升级依赖

3. Starters 选择原则

TIP

  • 按需选择:只引入实际需要的 Starters
  • 避免冲突:注意互斥的 Starters(如 Web 和 WebFlux)
  • 关注生态:优先选择官方 Starters

总结

Spring Boot 的构建系统设计充分体现了"约定优于配置"的理念:

  1. 统一的依赖管理减少了版本冲突和配置复杂度
  2. 丰富的 Starters 生态提供了一站式的依赖解决方案
  3. 灵活的构建工具支持满足不同项目的需求
  4. 生产就绪的特性帮助项目快速上线

通过合理使用这些构建系统特性,开发团队可以专注于业务逻辑实现,而不是基础设施配置,大大提升开发效率和代码质量。