目录前言一、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 什么是 Starter4.2 Starter 的真正价值五、spring-boot-starter-parent5.1 是什么5.2 作用统一管理版本管理插件版本提供默认配置5.3 注意六、spring-boot-starter6.1 是什么6.2 引入内容6.3 不包含七、spring-boot-starter-web7.1 是什么7.2 依赖结构7.3 可以直接使用八、spring-boot-starter-test8.1 为什么需要8.2 包含内容8.3 常见测试SpringBootTestMockito8.4 scopetest九、必须使用 starter-parent 吗方式1推荐方式2企业项目常见十、三者关系图九、Spring Boot 项目标准依赖模板十、总结MavenSpring Boot推荐组合JDK8JDK17多模块项目前言在日常 Java 开发中我们几乎都会接触到 Maven 和 Spring Boot。很多初学者会有以下疑问dependencies和dependencyManagement有什么区别Maven 多模块项目如何管理依赖Spring Boot 为什么只引入一个 Starter 就能使用很多功能spring-boot-starter-parent、spring-boot-starter、spring-boot-starter-web有什么区别单元测试为什么还要引入spring-boot-starter-testSpring Boot 各版本支持哪些 JDK本文将系统梳理这些知识点。一、Maven 依赖管理1.1 dependencies作用用于真正引入依赖。例如父工程projectpackagingpom/packagingdependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.42/version/dependency/dependencies/project子模块dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency这种情况下子模块会自动继承该依赖实际上子模块甚至不用再写这段 dependencyMaven 会自动传递给所有子模块可以执行mvn dependency:tree查看依赖树验证。1.2 dependencyManagement推荐作用用于统一管理依赖版本例如projectpackagingpom/packagingdependencyManagementdependenciesdependencygroupIdorg.apache.shardingsphere/groupIdartifactIdshardingsphere-jdbc/artifactIdversion5.5.2/version/dependency/dependencies/dependencyManagement/project子模块dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdshardingsphere-jdbc/artifactId/dependency无需再写version5.5.2/version这种情况下子模块必须声明 dependency但不需要写 versionMaven 会从父工程的dependencyManagement中找到版本号注意dependencyManagement不会自动引入依赖。例如dependencyManagementdependenciesdependencygroupIdmysql/groupIdartifactIdmysql-connector-j/artifactIdversion9.3.0/version/dependency/dependencies/dependencyManagement子模块如果不写dependencygroupIdmysql/groupIdartifactIdmysql-connector-j/artifactId/dependency是无法使用 MySQL 驱动的。1.3 两者区别项目dependenciesdependencyManagement是否引入依赖✅❌是否管理版本✅✅子模块自动拥有✅❌企业项目推荐公共依赖统一版本二、多模块项目最佳实践2.1 推荐结构root-parent │ ├── user-service ├── order-service ├── pay-service └── common父工程projectpackagingpom/packaging/project2.2 统一管理版本dependencyManagementdependenciesdependencygroupIdmysql/groupIdartifactIdmysql-connector-j/artifactIdversion9.3.0/version/dependencydependencygroupIdorg.apache.shardingsphere/groupIdartifactIdshardingsphere-jdbc/artifactIdversion5.5.2/version/dependency/dependencies/dependencyManagement2.3 公共依赖dependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependencies所有模块自动继承。2.4 企业项目推荐模式dependencyManagement ↓ 统一版本 dependencies ↓ 公共依赖 子模块 dependencies ↓ 按需引入三、Spring Boot 版本与 JDK 对照表Spring BootSpring Framework最低 JDK1.x4.xJava 72.0~2.75.xJava 83.x6.xJava 174.x7.xJava 17JDK8 推荐版本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 什么是 StarterStarter 本质上是依赖聚合包作用一次性引入一组兼容的依赖例如dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency实际上会引入spring-web spring-webmvc tomcat jackson validation spring-boot spring-boot-autoconfigure4.2 Starter 的真正价值Starter ≠ 自动配置实际上Starter AutoConfiguration 开箱即用例如spring:redis:host:localhost然后AutowiredprivateRedisTemplateredisTemplate;直接可用。原因Redis Starter ↓ RedisAutoConfiguration ↓ 自动创建 Bean五、spring-boot-starter-parent5.1 是什么parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.18/version/parent它是Maven 父工程5.2 作用统一管理版本例如dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-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-starter6.1 是什么Spring Boot 核心启动器。dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependency6.2 引入内容spring-core spring-context spring-beans spring-aop spring-boot spring-boot-autoconfigure logging6.3 不包含spring-web spring-webmvc tomcat因此RestController无法使用。七、spring-boot-starter-web注意正确名称是spring-boot-starter-web不是spring-boot-web。7.1 是什么Spring Boot Web 开发启动器。dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency7.2 依赖结构spring-boot-starter-web │ ├── spring-boot-starter ├── spring-web ├── spring-webmvc ├── jackson ├── validation └── tomcat注意spring-boot-starter-web 已经包含 spring-boot-starter所以对于 web 项目dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency即可spring-boot-starter会被自动引入无需再手动引入。7.3 可以直接使用RestControllerRequestMappingGetMappingPostMapping八、spring-boot-starter-test8.1 为什么需要Web Starter 不包含测试框架。如果要进行单元测试需要引入dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency8.2 包含内容JUnit5 Mockito AssertJ Hamcrest Spring Test JSONassert8.3 常见测试SpringBootTestSpringBootTestclassUserServiceTest{AutowiredprivateUserServiceuserService;Testvoidtest(){}}MockitoExtendWith(MockitoExtension.class)classUserServiceTest{MockprivateUserMapperuserMapper;InjectMocksprivateUserServiceuserService;}8.4 scopetestscopetest/scope表示阶段可用main编译❌test编译✅test运行✅打包Jar❌因此测试框架不会进入生产环境。九、必须使用 starter-parent 吗不是必须Spring Boot 官方支持两种方式。方式1推荐parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.18/version/parent然后dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency不用写版本。这是最简单的方式。方式2企业项目常见很多公司已经有自己的父工程parentgroupIdcom.company/groupIdartifactIdcompany-parent/artifactId/parent这时候不能再继承spring-boot-starter-parent因为Maven只能有一个parent。于是改成dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion2.7.18/versiontypepom/typescopeimport/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 项目parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.18/version/parentdependencies!-- Web开发 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!-- redis --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!-- 单元测试 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies十、总结Mavendependencies ↓ 真正引入依赖 dependencyManagement ↓ 统一管理版本Spring Bootspring-boot-starter-parent ↓ 管理版本和插件 spring-boot-starter ↓ Boot核心功能 spring-boot-starter-web ↓ Web开发 spring-boot-starter-test ↓ 单元测试推荐组合JDK8Spring Boot 2.7.18JDK17Spring Boot 3.x多模块项目父工程 ├── dependencyManagement统一版本 ├── dependencies公共依赖 └── modules 子模块 └── dependencies按需引入