当前位置: 首页
编程语言
SpringBoot Maven依赖管理基本步骤与示例

SpringBoot Maven依赖管理基本步骤与示例

热心网友 时间:2026-06-19
转载

Maven管理SpringBoot依赖时,dependencyManagement统一版本但不自动引入,需dependencies实际添加;spring-boot-starter-parent管理版本插件,Starter聚合依赖与自动配置实现开箱即用;多模块父工程用dependencyManagement锁定版本,子模块dependencies引入公共依赖可

说起Spring Boot项目中的依赖管理,Ma ven几乎是绕不开的标配。Spring Boot专门提供了一个starter POM——spring-boot-starter-parent,它就像是依赖管理的“预制菜”,让项目一继承就能坐享其成。下面就来拆解一下,怎么在Spring Boot项目中用好Ma ven做依赖管理。

SpringBoot与Ma ven依赖管理的基本步骤和示例

前言

日常写Ja va,Ma ven和Spring Boot基本是形影不离的。不少新手容易困惑:dependenciesdependencyManagement到底差在哪?多模块项目怎么管依赖才不乱?为什么一个Starter就能拉出一堆功能?spring-boot-starter-parentspring-boot-starterspring-boot-starter-web这几个家伙各管哪一摊?单元测试还得多加个spring-boot-starter-test?Spring Boot各个版本又该配什么JDK?

本文就来系统捋一捋这些知识点,直接上干货。

一、Ma ven 依赖管理

1.1 dependencies

作用

它的作用很直接:真正把依赖“拉”进来

举个例子,父工程这样写:


    pom
    
        
            org.projectlombok
            lombok
            1.18.42
        
    

子模块里就算不写任何dependency,也会自动继承lombok。实际上连上面那一段子模块中的dependency都可以省略,Ma ven会自动传递给所有子模块。

想验证的话,跑一句:

mvn dependency:tree

整棵依赖树一览无余。

1.2 dependencyManagement(推荐)

作用

专门用来统一管版本,但不自动引入依赖。写法如下:


    pom
    
        
            
                org.apache.shardingsphere
                shardingsphere-jdbc
                5.5.2
            
        
    

子模块使用时,只需声明坐标,不用写版本:


    org.apache.shardingsphere
    shardingsphere-jdbc

Ma ven会从父工程的dependencyManagement里自动找到版本号。

这里有个关键点:子模块必须自己写dependency,否则依赖不会出现。比如父工程只管理了MySQL驱动的版本,子模块如果不写对应的dependency,项目里根本用不了MySQL。

1.3 两者区别

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

二、多模块项目最佳实践

2.1 推荐结构

下面是一套常见的多模块布局:

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

父工程打包类型必须是pom:


    pom

2.2 统一管理版本

父工程中通过dependencyManagement统一管控所有第三方库的版本:


    
        
            mysql
            mysql-connector-j
            9.3.0
        
        
            org.apache.shardingsphere
            shardingsphere-jdbc
            5.5.2
        
    

2.3 公共依赖

每个模块都需要的公共库(比如lombok、日志门面等),放到父工程的dependencies里,所有子模块自动继承。


    
        org.projectlombok
        lombok
    

2.4 企业项目推荐模式

整体套路可以总结成一句话:父工程用dependencyManagement锁定版本,用dependencies放公共依赖;子模块按需写dependencies,版本由父工程统一配。

三、Spring Boot 版本与 JDK 对照表

选版本之前先看这张对照表,心里有底:

Spring BootSpring Framework最低 JDK
1.x4.xJa va 7
2.0~2.75.xJa va 8
3.x6.xJa va 17
4.x7.xJa va 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本质上就是一个依赖聚合包,干的事很简单:一次性把一组兼容的依赖全部拉进来。

比如引用spring-boot-starter-web


    org.springframework.boot
    spring-boot-starter-web

它背后实际引入了:

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

4.2 Starter 的真正价值

Starter ≠ 自动配置。它的价值必须和AutoConfiguration配合才能体现:

Starter
+
AutoConfiguration
=
开箱即用

举个例子,配置Redis:

spring:
  redis:
    host: localhost

然后在代码里直接注入:

@Autowired
private RedisTemplate redisTemplate;

就能用。背后实际上是:

Redis Starter
        ↓
RedisAutoConfiguration
        ↓
自动创建 Bean

五、spring-boot-starter-parent

5.1 是什么

它就是Ma ven里的一个父工程:


    org.springframework.boot
    spring-boot-starter-parent
    2.7.18

5.2 作用

统一管理版本

引入任何Spring Boot starter都不用写版本号,比如:


    org.springframework.boot
    spring-boot-starter-web

版本由parent统一搞定。

管理插件版本

ma ven-compiler-pluginma ven-surefire-pluginspring-boot-ma ven-plugin这些常用插件的版本也一并管好。

提供默认配置

比如编码UTF-8、Ja va版本、资源过滤规则等,都不用自己配。

5.3 注意

它只负责Ma ven层面的配置管理,并不提供Spring Boot功能。真正的功能是靠starter和自动配置来实现的。

六、spring-boot-starter

6.1 是什么

Spring Boot的核心启动器,引入它:


    org.springframework.boot
    spring-boot-starter

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 是什么

专门用于Web开发的启动器:


    org.springframework.boot
    spring-boot-starter-web

7.2 依赖结构

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

注意:spring-boot-starter-web已经包含了spring-boot-starter,所以Web项目只需要引入这一个就够。

7.3 可以直接使用

引入后就能直接写@RestController@RequestMapping@GetMapping@PostMapping等Web注解。

八、spring-boot-starter-test

8.1 为什么需要

Web Starter不带测试框架。要搞单元测试,得额外引入:


    org.springframework.boot
    spring-boot-starter-test
    test

8.2 包含内容

JUnit5
Mockito
AssertJ
Hamcrest
Spring Test
JSONassert

8.3 常见测试

SpringBootTest

@SpringBootTest
class UserServiceTest {
    @Autowired
    private UserService userService;
    @Test
    void test() {
    }
}

Mockito

@ExtendWith(MockitoExtension.class)
class UserServiceTest {
    @Mock
    private UserMapper userMapper;
    @InjectMocks
    private UserService userService;
}

8.4 scope=test

test的作用范围:

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

这样测试框架就不会混进生产环境的包里。

九、必须使用 starter-parent 吗?

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

方式1(推荐)


    org.springframework.boot
    spring-boot-starter-parent
    2.7.18

然后直接引入starter,版本不用写——最简单。

方式2(企业项目常见)

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


    com.company
    company-parent

Ma ven只能有一个parent,这时候就不能继承spring-boot-starter-parent了。替代方案是用spring-boot-dependencies做BOM导入:


    
        
            org.springframework.boot
            spring-boot-dependencies
            2.7.18
            pom
            import
        
    

效果和继承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为例,一个典型的pom.xml长这样:


    org.springframework.boot
    spring-boot-starter-parent
    2.7.18


    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
    
        org.projectlombok
        lombok
        true
    
    
    
    	org.springframework.boot
    	spring-boot-starter-data-redis
	
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    

十、总结

Ma ven

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(按需引入)
来源:https://www.jb51.net/program/3657091hw.htm

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
用 LlamaIndex 做 RAG 前,先把 Reader、Index、Retriever 的边界写清楚

用 LlamaIndex 做 RAG 前,先把 Reader、Index、Retriever 的边界写清楚

LlamaIndex 不适合用“5 行代码做一个 RAG demo”来判断好坏。那个 demo 只能证明框架能跑通一次,不证明你的数据进入系统后仍然可追踪,不证明检索结果能解释,不证明 Agent 的

时间:2026-07-13 14:05
Go语言AES混淆加密解密敏感数据详解

Go语言AES混淆加密解密敏感数据详解

Go语言AES加密需注意:密钥长度必须为16、24或32字节,否则会引发panic;CBC模式解密乱码常因IV或PKCS7填充错误;GCM模式中nonce不可重用,否则密钥可被恢复;ECB模式因明文块输出固定密文,存在安全风险,不建议使用。

时间:2026-07-13 06:53
C++ std::atomic::wait高性能轮询等待原子变量状态变化

C++ std::atomic::wait高性能轮询等待原子变量状态变化

C++20的std::atomic::wait是轻量级等待机制,需GCC11+ Clang12+及glibc≥2 34,macOS不支持。需与notify配对,注意内存序,循环检查防虚假唤醒。超时版本精度有限,高性能关键在notify时机与内存序正确性。

时间:2026-07-13 06:53
VSCode左侧边栏不见了?快速找回方法

VSCode左侧边栏不见了?快速找回方法

按Ctrl+B或Cmd+B可恢复被误触隐藏的侧边栏。若无效,需检查窗口焦点是否在编辑器、是否处于全屏或Zen模式、workbench activityBar visible配置项、扩展冲突以及远程环境同步问题,并逐一排查。

时间:2026-07-13 06:53
VSCode中利用Node批量修改多媒体文件元数据标签

VSCode中利用Node批量修改多媒体文件元数据标签

music-metadata库支持跨格式读写MP3、FLAC、M4A、WAV等音频元数据,需先用parseFile()初始化,再调用writeMetadata()写入。批量修改前必须验证写入支持,封面图片需为Uint8Array格式。在VSCode终端运行脚本比插件更可控,处理中文路径时需切换终端代码页为UTF-8并指定ID3v2 3版本以避免乱码。

时间:2026-07-13 06:53
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜