spring-boot-starter-parent 与 spring-boot-dependencies区别

📅 发布时间:2026/7/7 23:32:11 👁️ 浏览次数:
spring-boot-starter-parent 与 spring-boot-dependencies区别
一、前言我们平常时开发springboot项目时pom文件中引入的依赖总是少不了spring-boot-starter-parent 或 spring-boot-dependencies仅其一若未引入会导致我们的项目缺包今天我们来探讨一些两者的区别。当我们使用 spring 或 spring-boot 开发项目时需要引入很多依赖包括 spring 本身的组件、各种 spring-boot-starter、以及其它第三方依赖如slf4j、redis。依赖多了版本的选择是个问题就怕哪个版本选择的不对导致出现一些意想不到的 BUG。比如下面这个例子dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version5.2.10.RELEASE/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version5.2.10.RELEASE/version /dependency dependency groupIdorg.slf4j/groupId artifactIdslf4j-log4j12/artifactId version1.7.26/version /dependency dependency groupIdorg.postgresql/groupId artifactIdpostgresql/artifactId version42.2.14/version /dependency /dependenciesslf4j 的 1.7.26 版本、postgresql 的 42.2.14 版本和 spring 的 5.2.10.RELEASE 版本会不会有冲突呢Spring Boot的每个发布版本都会规划它所支持的依赖项。实际上你不用指定这些依赖项的版本号因为Spring Boot都为你管理好了。当更新Spring Boot时会相应的更新依赖。二、spring-boot-starter-parent简述Maven用户可以继承spring-boot-starter-parent项目来获取最佳依赖。这个父项目提供了以下几个功能默认Java 1.6编译UTF-8编码格式依赖管理部分可让你对公共依赖省略version标签。继承自spring-boot-dependencies POM。良好的资源过滤良好的插件配置对于application.properties和application.yml包括profile-specific文件良好的资源过滤最后一点因为默认配置文件接受Spring风格的占位符(${})Maven过滤器换成了…占位符。可以通过Maven属性resource.delimiter替换org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE只需要在这里指定Spring Boot的版本号。如果导入其他的starters你可以完全省略版本号。使用这个配置你还可以通过property覆盖内部的依赖。例如在pom.xml中升级Spring Data release train。properties spring-data-releasetrain.versionFowler-SR2/spring-data-releasetrain.version /properties可以通过spring-boot-dependencies pom查看支持的属性列表。完整案例?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdorg.example/groupId artifactIdspringboot-rabbitmq-fanout-producer/artifactId version1.0-SNAPSHOT/version properties maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target /properties parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.1.8.RELEASE/version relativePath/ !-- lookup parent from repository -- /parent dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-amqp/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency /dependencies /project三、spring-boot-dependencies简述可能有人不喜欢继承spring-boot-starter-parent POM。你可能有自己的企业标准parent或者你可能只是比较喜欢明确声明所有的Maven配置。如果你不想使用spring-boot-starter-parent你依然可以通过使用scopeimport利用依赖管理的便利dependencyManagement dependencies dependency !-- Import dependency management from Spring Boot -- groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version2.1.3.RELEASE/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement这种方式不能使用property的形式覆盖原始的依赖项。要达到同样的效果需要在dependencyManagement里面的spring-boot-dependencies之前添加依赖的东西。例如要升级Spring Data release trainpom.xml应该是这样的dependencyManagement dependencies !-- Override Spring Data release train provided by Spring Boot -- dependency groupIdorg.springframework.data/groupId artifactIdspring-data-releasetrain/artifactId versionFowler-SR2/version scopeimport/scope typepom/type /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version2.1.3.RELEASE/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement完整案例?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdorg.example/groupId artifactIdspringboot-rabbitmq-fanout-producer/artifactId version1.0-SNAPSHOT/version properties maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target /properties dependencyManagement dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version2.3.2.RELEASE/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-amqp/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency /dependencies /project只需在 dependencyManagement 里面配置好 spring-boot-dependencies 的版本在 dependencies 里面就不用再指定其它版本号了其实 spring-boot-dependencies 就是一个 pom.xml里面管理了很多常见第三方的依赖和版本当然你也可以重新指定版本号。四、总结由上述我们已经知道开发springboot项目引入spring-boot-starter-parent 与 spring-boot-dependencies两者之一是必须的但这里还需要看下这两个依赖的源码让我们能对它们的认知更加深刻。首先我们从spring-boot-starter-parent进入可以看到spring-boot-starter-parent 其实继承了spring-boot-dependencies 我们再进入spring-boot-dependencies 内可以看到的是spring-boot-dependencies内为我们管理着许多依赖也统一管理着一些依赖的版本号因此才有我们上述所说的后续引入的这些依赖就不需要重新指定版本号了前提是spring-boot-dependencies有管理。还有一个问题为什么两者对spring-data-releasetrain.version的覆写方式不一样因为spring-boot-starter-parent 继承了spring-boot-dependencies 并提供支持使用实现重写。五、参考文章借鉴了下面两位博主的文章。https://www.cnblogs.com/sjshare/p/10669001.htmlhttps://blog.csdn.net/qq_34246965/article/details/119729115utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_linkdepth_1-utm_sourcedistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link