Spring Boot 项目集成 Gradle:构建、测试、打包全流程教程

Spring Boot 项目集成 Gradle:构建、测试、打包全流程教程

本文将详细介绍如何使用 Gradle 构建工具来管理 Spring Boot 项目的全流程,包括项目创建、依赖管理、代码编写、测试、打包和运行等环节。

1. 环境准备

在开始前,请确保你的开发环境中已安装以下工具:

  • JDK 17 或更高版本
  • Gradle 7.5+ 或使用 Gradle 包装器(推荐)
  • IDE(如 IntelliJ IDEA 或 Eclipse)

2. 创建 Spring Boot 项目

2.1 使用 Spring Initializr 创建

访问 Spring Initializr 网站,进行如下配置:

  • Project: Gradle Project
  • Language: Java
  • Spring Boot: 3.2.x(最新稳定版)
  • Group: com.example
  • Artifact: spring-boot-gradle-demo
  • Name: spring-boot-gradle-demo
  • Package name: com.example.demo
  • Packaging: Jar
  • Java: 17
  • Dependencies: Spring Web, Spring Boot DevTools, Lombok, Spring Boot Starter Test

点击 "Generate" 按钮下载项目压缩包,解压后导入到你的 IDE 中。

2.2 项目结构

导入后,项目结构如下:

复制代码
spring-boot-gradle-demo/
├── build.gradle          // Gradle 构建脚本
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties  // Gradle 包装器配置
├── gradlew               // Linux/Mac 上的 Gradle 包装器脚本
├── gradlew.bat           // Windows 上的 Gradle 包装器脚本
├── settings.gradle       // Gradle 项目设置
└── src/
    ├── main/
    │   ├── java/
    │   │   └── com/
    │   │       └── example/
    │   │           └── demo/
    │   │               └── SpringBootGradleDemoApplication.java  // 主应用类
    │   └── resources/
    │       ├── application.properties  // 应用配置文件
    │       ├── static/                 // 静态资源
    │       └── templates/              // 模板文件
    └── test/
        └── java/
            └── com/
                └── example/
                    └── demo/
                        └── SpringBootGradleDemoApplicationTests.java  // 测试类

3. 理解 Gradle 配置文件

3.1 build.gradle

这是 Gradle 构建的核心配置文件:

复制代码
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
    id 'io.spring.dependency-management' version '1.1.4'
}

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

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

配置说明:

  • plugins: 应用的 Gradle 插件,包括 Java 插件、Spring Boot 插件和依赖管理插件
  • group, version, sourceCompatibility: 项目基本信息和 Java 版本
  • repositories: 依赖仓库配置,这里使用 Maven 中央仓库
  • dependencies: 项目依赖配置
    • implementation: 编译和运行时依赖
    • developmentOnly: 仅开发环境使用的依赖
    • compileOnly: 仅编译时需要,运行时不需要的依赖
    • annotationProcessor: 注解处理器
    • testImplementation: 测试依赖
  • tasks.named('test'): 配置测试任务使用 JUnit 5 平台

3.2 settings.gradle

复制代码
rootProject.name = 'spring-boot-gradle-demo'

这个文件用于配置项目名称和多项目构建信息,单项目情况下只需要指定根项目名称。

4. 编写示例代码

4.1 创建控制器

DemoController.java

创建一个简单的 REST 控制器:

复制代码
package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class DemoController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot with Gradle!";
    }
    
    @GetMapping("/greet/{name}")
    public String greet(@PathVariable String name) {
        return "Hello, " + name + "!";
    }
}

4.2 编写测试用例

DemoControllerTest.java

为控制器编写测试:

复制代码
package com.example.demo.controller;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
@AutoConfigureMockMvc
public class DemoControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testSayHello() throws Exception {
        mockMvc.perform(get("/api/hello"))
                .andExpect(status().isOk())
                .andExpect(content().string("Hello, Spring Boot with Gradle!"));
    }

    @Test
    public void testGreet() throws Exception {
        String name = "Gradle";
        mockMvc.perform(get("/api/greet/{name}", name))
                .andExpect(status().isOk())
                .andExpect(content().string("Hello, " + name + "!"));
    }
}

5. Gradle 构建命令

Gradle 提供了丰富的任务来管理项目生命周期,以下是常用命令:

5.1 查看所有任务

bash 复制代码
./gradlew tasks  # Linux/Mac
gradlew.bat tasks  # Windows

5.2 编译项目

bash 复制代码
./gradlew compileJava

5.3 运行测试

bash 复制代码
./gradlew test

测试报告生成在 build/reports/tests/test/index.html 路径下。

5.4 运行应用

bash 复制代码
./gradlew bootRun

启动后,可访问 http://localhost:8080/api/hello 测试接口。

5.5 打包应用

bash 复制代码
./gradlew build

打包成功后,生成的 JAR 文件位于 build/libs/ 目录下,文件名为 spring-boot-gradle-demo-0.0.1-SNAPSHOT.jar

5.6 清理构建产物

bash 复制代码
./gradlew clean

5.7 构建并跳过测试

bash 复制代码
./gradlew build -x test

6. 运行打包后的应用

打包完成后,可以通过以下命令运行应用:

bash 复制代码
java -jar build/libs/spring-boot-gradle-demo-0.0.1-SNAPSHOT.jar

7. 自定义 Gradle 任务

你可以在 build.gradle 中添加自定义任务来满足特定需求。例如,添加一个任务来显示项目信息:

复制代码
// 在 build.gradle 中添加以下内容
task showProjectInfo {
    doLast {
        println "Project Name: ${project.name}"
        println "Project Version: ${project.version}"
        println "Java Version: ${sourceCompatibility}"
        println "Spring Boot Version: ${project.properties['spring.boot.version']}"
    }
}

// 让 build 任务依赖于 showProjectInfo 任务
build.dependsOn showProjectInfo

现在运行 ./gradlew build 时会先执行自定义任务,输出项目信息。

8. 总结

通过本文,你已经学会了如何:

  • 创建集成 Gradle 的 Spring Boot 项目
  • 理解 Gradle 配置文件
  • 编写简单的 Spring Boot 应用和测试
  • 使用 Gradle 命令进行构建、测试和打包
  • 自定义 Gradle 任务

Gradle 提供了强大的依赖管理和构建能力,与 Spring Boot 结合使用可以极大提高开发效率。掌握这些基本操作后,你可以根据项目需求进一步探索 Gradle 更高级的功能。

相关推荐
一勺菠萝丶4 小时前
Spring Boot 项目启动报错:`Could not resolve type id ... no such class found` 终极解决方案!
java·spring boot·后端
canonical_entropy4 小时前
组合为什么优于继承:从工程实践到数学本质
后端·数学·设计模式
聪明的笨猪猪4 小时前
Java Redis “底层结构” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
Victor3564 小时前
Redis(62)如何优化Redis的连接数?
后端
绝无仅有4 小时前
面试真实经历某商银行大厂Java问题和答案总结(三)
后端·面试·github
绝无仅有4 小时前
面试真实经历某商银行大厂Java问题和答案总结(五)
后端·面试·github
Victor3564 小时前
Redis(63)Redis的Lua脚本如何使用?
后端
Chris.Yuan7704 小时前
泛型学习——看透通配符?与PECS 法则
java·学习
风象南4 小时前
SpringBoot实现JWT动态密钥轮换
后端