当前位置: 首页 > news >正文

Spring Boot 与 Maven 依赖管理详解

目录

  • 前言
  • 一、Maven 依赖管理
    • 1.1 dependencies
      • 作用
    • 1.2 dependencyManagement(推荐)
      • 作用
      • 注意
    • 1.3 两者区别
  • 二、多模块项目最佳实践
    • 2.1 推荐结构
    • 2.2 统一管理版本
    • 2.3 公共依赖
    • 2.4 企业项目推荐模式
  • 三、Spring Boot 版本与 JDK 对照表
    • JDK8 推荐版本
    • JDK17 推荐版本
    • 常见组合
      • 老项目
      • 新项目
  • 四、Spring Boot Starter 机制
    • 4.1 什么是 Starter
    • 4.2 Starter 的真正价值
  • 五、spring-boot-starter-parent
    • 5.1 是什么
    • 5.2 作用
      • 统一管理版本
      • 管理插件版本
      • 提供默认配置
    • 5.3 注意
  • 六、spring-boot-starter
    • 6.1 是什么
    • 6.2 引入内容
    • 6.3 不包含
  • 七、spring-boot-starter-web
    • 7.1 是什么
    • 7.2 依赖结构
    • 7.3 可以直接使用
  • 八、spring-boot-starter-test
    • 8.1 为什么需要
    • 8.2 包含内容
    • 8.3 常见测试
      • SpringBootTest
      • Mockito
    • 8.4 scope=test
  • 九、必须使用 starter-parent 吗?
    • 方式1(推荐)
    • 方式2(企业项目常见)
  • 十、三者关系图
  • 九、Spring Boot 项目标准依赖模板
  • 十、总结
    • Maven
    • Spring Boot
    • 推荐组合
      • JDK8
      • JDK17+
      • 多模块项目

前言

在日常 Java 开发中,我们几乎都会接触到 Maven 和 Spring Boot。

很多初学者会有以下疑问:

  • dependenciesdependencyManagement有什么区别?
  • Maven 多模块项目如何管理依赖?
  • Spring Boot 为什么只引入一个 Starter 就能使用很多功能?
  • spring-boot-starter-parentspring-boot-starterspring-boot-starter-web有什么区别?
  • 单元测试为什么还要引入spring-boot-starter-test
  • Spring Boot 各版本支持哪些 JDK?

本文将系统梳理这些知识点。


一、Maven 依赖管理

1.1 dependencies

作用

用于真正引入依赖

例如:

父工程:

<project><packaging>pom</packaging><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.42</version></dependency></dependencies></project>

子模块:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

这种情况下:

  • 子模块会自动继承该依赖
  • 实际上子模块甚至不用再写这段 dependency
  • Maven 会自动传递给所有子模块

可以执行:

mvn dependency:tree

查看依赖树验证。


1.2 dependencyManagement(推荐)

作用

用于:

统一管理依赖版本

例如:

<project><packaging>pom</packaging><dependencyManagement><dependencies><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc</artifactId><version>5.5.2</version></dependency></dependencies></dependencyManagement></project>

子模块:

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc</artifactId></dependency>

无需再写:

<version>5.5.2</version>

这种情况下:

  • 子模块必须声明 dependency
  • 不需要写 version
  • Maven 会从父工程的dependencyManagement中找到版本号

注意

dependencyManagement

不会自动引入依赖。

例如:

<dependencyManagement><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-j</artifactId><version>9.3.0</version></dependency></dependencies></dependencyManagement>

子模块如果不写:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency>

是无法使用 MySQL 驱动的。


1.3 两者区别

项目dependenciesdependencyManagement
是否引入依赖
是否管理版本
子模块自动拥有
企业项目推荐公共依赖统一版本

二、多模块项目最佳实践

2.1 推荐结构

root-parent │ ├── user-service ├── order-service ├── pay-service └── common

父工程:

<project><packaging>pom</packaging></project>

2.2 统一管理版本

<dependencyManagement><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-j</artifactId><version>9.3.0</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc</artifactId><version>5.5.2</version></dependency></dependencies></dependencyManagement>

2.3 公共依赖

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>

所有模块自动继承。


2.4 企业项目推荐模式

dependencyManagement ↓ 统一版本 dependencies ↓ 公共依赖 子模块 dependencies ↓ 按需引入

三、Spring Boot 版本与 JDK 对照表

Spring BootSpring Framework最低 JDK
1.x4.xJava 7
2.0~2.75.xJava 8
3.x6.xJava 17
4.x7.xJava 17

JDK8 推荐版本

Spring Boot 2.7.18

这是 Spring Boot 2.x 最后一个正式版本。


JDK17 推荐版本

Spring Boot 3.x

常见组合

老项目

JDK8 Spring Boot 2.7.18 MyBatis MySQL Redis

新项目

JDK17 Spring Boot 3.x Spring Cloud 2025+

四、Spring Boot Starter 机制

4.1 什么是 Starter

Starter 本质上是:

依赖聚合包

作用:

一次性引入一组兼容的依赖

例如:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

实际上会引入:

spring-web spring-webmvc tomcat jackson validation spring-boot spring-boot-autoconfigure

4.2 Starter 的真正价值

Starter ≠ 自动配置

实际上:

Starter + AutoConfiguration = 开箱即用

例如:

spring:redis:host:localhost

然后:

@AutowiredprivateRedisTemplateredisTemplate;

直接可用。

原因:

Redis Starter ↓ RedisAutoConfiguration ↓ 自动创建 Bean

五、spring-boot-starter-parent

5.1 是什么

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

它是:

Maven 父工程

5.2 作用

统一管理版本

例如:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

无需指定版本。


管理插件版本

例如:

maven-compiler-plugin maven-surefire-plugin spring-boot-maven-plugin

提供默认配置

例如:

UTF-8 Java版本 资源过滤

5.3 注意

它:

不提供 Spring Boot 功能

只是管理 Maven 配置。


六、spring-boot-starter

6.1 是什么

Spring Boot 核心启动器。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>

6.2 引入内容

spring-core spring-context spring-beans spring-aop spring-boot spring-boot-autoconfigure logging

6.3 不包含

spring-web spring-webmvc tomcat

因此:

@RestController

无法使用。


七、spring-boot-starter-web

注意:正确名称是spring-boot-starter-web,不是spring-boot-web


7.1 是什么

Spring Boot Web 开发启动器。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

7.2 依赖结构

spring-boot-starter-web │ ├── spring-boot-starter ├── spring-web ├── spring-webmvc ├── jackson ├── validation └── tomcat

注意:

spring-boot-starter-web 已经包含 spring-boot-starter

所以,对于 web 项目:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

即可,spring-boot-starter会被自动引入,无需再手动引入。


7.3 可以直接使用

@RestController@RequestMapping@GetMapping@PostMapping

八、spring-boot-starter-test

8.1 为什么需要

Web Starter 不包含测试框架。

如果要进行单元测试,需要引入:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

8.2 包含内容

JUnit5 Mockito AssertJ Hamcrest Spring Test JSONassert

8.3 常见测试

SpringBootTest

@SpringBootTestclassUserServiceTest{@AutowiredprivateUserServiceuserService;@Testvoidtest(){}}

Mockito

@ExtendWith(MockitoExtension.class)classUserServiceTest{@MockprivateUserMapperuserMapper;@InjectMocksprivateUserServiceuserService;}

8.4 scope=test

<scope>test</scope>

表示:

阶段可用
main编译
test编译
test运行
打包Jar

因此测试框架不会进入生产环境。


九、必须使用 starter-parent 吗?

不是必须,Spring Boot 官方支持两种方式。

方式1(推荐)

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

然后:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

不用写版本。

这是最简单的方式。

方式2(企业项目常见)

很多公司已经有自己的父工程:

<parent><groupId>com.company</groupId><artifactId>company-parent</artifactId></parent>

这时候不能再继承:

spring-boot-starter-parent

因为Maven只能有一个parent。

于是改成:

<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.18</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

效果和 starter-parent 几乎一样。


十、三者关系图

spring-boot-starter-parent │ ├── 管理版本 ├── 管理插件 └── 不提供功能 spring-boot-starter │ ├── spring-core ├── spring-context ├── spring-boot └── logging spring-boot-starter-web │ ├── spring-boot-starter ├── spring-web ├── spring-webmvc ├── jackson └── tomcat

九、Spring Boot 项目标准依赖模板

对于 JDK8 + Spring Boot 2.7.18 项目:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version></parent><dependencies><!-- Web开发 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 单元测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

十、总结

Maven

dependencies ↓ 真正引入依赖 dependencyManagement ↓ 统一管理版本

Spring Boot

spring-boot-starter-parent ↓ 管理版本和插件 spring-boot-starter ↓ Boot核心功能 spring-boot-starter-web ↓ Web开发 spring-boot-starter-test ↓ 单元测试

推荐组合

JDK8

Spring Boot 2.7.18

JDK17+

Spring Boot 3.x

多模块项目

父工程 ├── dependencyManagement(统一版本) ├── dependencies(公共依赖) └── modules 子模块 └── dependencies(按需引入)
http://www.gsyq.cn/news/1514127.html

相关文章:

  • 别再死记硬背了!用Python+SymPy库5分钟搞定电路分析(基尔霍夫/戴维宁实战)
  • 大语言模型跨领域评估:挑战与优化策略
  • 从‘悬浮提示’到‘动态合并’:一份完整的ag-grid-vue企业级表格优化清单
  • ComfyUI-Impact-Pack V8:AI图像细节增强的完整指南
  • Halcon实战:用smallest_rectangle1和smallest_rectangle2搞定工业瑕疵的矩形框标注(附完整代码)
  • 本文摘要:GR3-Fourier V9.0系统发布全局定义头文件(global_gr3_def.h)与死区补偿模块头文件(dead_zone_compensate.h)。核心内容包括:1) 定义系统版
  • 如何3分钟免费解锁微信网页版:终极浏览器插件解决方案
  • CSS 样式穿透
  • 淘宝自动化脚本终极指南:如何让手机自动完成所有淘宝日常任务
  • 别再死记硬背了!用Python可视化带你‘看见’牛顿-莱布尼茨公式的证明过程
  • 5分钟快速上手:NoSleep终极Windows防休眠工具完整指南
  • Windows USB开发为何如此困难?UsbDk高级解决方案深度解析
  • 告别卡顿!C# Halcon HWindowControl图像缩放与拖动的性能优化实战(附防闪烁代码)
  • 海康威视HCNetSDK.dll集成避坑指南:解决Java JNA调用中的常见错误与内存问题
  • 3分钟上手OBS背景移除插件:AI智能抠图让你的视频会议更专业
  • SAP SD模块实战:手把手教你用USEREXIT_SAVE_DOCUMENT_PREPARE搞定销售订单的必填项检查
  • 番茄小说下载器技术解析与多平台部署指南
  • 短视频全案策划拍摄哪家更值得信赖
  • asc-devkit开发套件——CANN上层工具的“加工厂“——从数据采集到性能分析的完整链路揭秘
  • 【操作系统实验】Linux 下多线程同步与互斥实战——生产者 - 消费者模型
  • 别再死记硬背了!用ASM图搞定VHDL状态机设计,从交通灯到FPGA实战
  • 终极指南:如何高效使用yuzu模拟器运行Switch游戏
  • 2026年当前市场烘焙设备销售厂家找哪家?专业选型与青岛杰麦深度解析 - 品牌鉴赏官2026
  • 2026企业协同办公工具全方位测评:适配不同团队的数字化办公工具深度解析
  • 2026年五金冲压件选购指南:从材质、工艺到供应商的全面分析 - 优质品牌商家
  • 告别WinForms默认丑界面:用Guna UI 2.0.4.4快速打造现代化桌面应用(附控件详解)
  • 3分钟掌握:高效实用的网易云音乐ncm转mp3完整指南
  • 2026甄选:常州高端婚纱品牌实力之选与行业深度分析 - 品牌发掘
  • 2026年,聊城异形钢管供应商:聊城市宏宝钢管有限公司 - 企业推荐官【官方】
  • Move Mouse:Windows防休眠与自动化鼠标操作的终极解决方案