如何在项目继承了父项目的情况下引入SpringBoot?

项目想引入SpringBoot框架,我们可以通过继承spring-boot-starter-parent来实现。如下:

xml 复制代码
<!-- Inherit defaults from Spring Boot -->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.2.0</version>
</parent>

但有时候项目可能需要有公司标准的父项目需要继承,这样我们就没办法使用上面的方式来引入SpringBoot了。不过,我们可以通过下面的方式来引入SpringBoot:

xml 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>3.2.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

为什么通过第二种方式能够实现同样的目的?

那我们先看第一种通过继承的方式引入SpringBoot做了什么?

<parent>标签的作用是使一个项目继承父项目中pom的所有配置。

然后我们点开spring-boot-starter-parent父项目的pom看到所有的依赖都在<dependencyManagement>中声明,并且没有在dependencies中声明依赖。

就是说我们的项目继承了父项目pring-boot-starter-parent<dependencyManagement>标签的所有配置依赖。

第二种配置方式做了什么?

import

This scope is only supported on a dependency of type pom in the <dependencyManagement> section. It indicates the dependency is to be replaced with the effective list of dependencies in the specified POM's <dependencyManagement> section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.

上面为maven官方文档对于import作用域的描述。意思是:import仅支持在<dependencyManagement><dependency>中使用。这表示这个依赖会被替换成这个依赖的<dependencyManagement>中配置的依赖。

简单的说就是,当我们使用第二种配置方式来引入SpringBoot,那么会将spring-boot-starter-parent依赖的pom文件的<dependencyManagement>标签内配置的依赖全部替换到当前项目的<dependencyManagement>中。

这样,我们发现第一种方式和第二种方式实现的效果是一样的。

参考文档

Maven官方文档 - 对于依赖的scope的描述

Spring Boot官方文档 - 如何通过不继承parent的方式使用Spring Boot

相关推荐
一人の梅雨10 分钟前
京东工业平台商品详情接口进阶实战:B2B采购场景适配+合规落地+多规格解析全方案
java·大数据·人工智能
callJJ12 分钟前
Spring AI 语音合成(TTS)完全指南:OpenAI Text-to-Speech
java·人工智能·spring·语音识别·spring ai
重生之后端学习18 分钟前
98. 验证二叉搜索树
java·数据结构·后端·算法·职场和发展
李慕婉学姐37 分钟前
【开题答辩过程】以《智能小区物业管理系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·数据库·后端
m***066840 分钟前
Spring Framework 中文官方文档
java·后端·spring
黎雁·泠崖1 小时前
【魔法森林冒险】13/14 支线任务 & 计分系统:丰富性与结局
java·开发语言
SuniaWang1 小时前
Spring AI 2.x 全面指南:架构升级、工具调用、多模型生态与实战示例
java·人工智能·后端·学习·spring·框架
闻哥1 小时前
Elasticsearch查询优化实战:从原理到落地的全方位调优指南
java·大数据·elasticsearch·搜索引擎·面试·全文检索·springboot
sheji34161 小时前
【开题答辩全过程】以 基于Java的甜品蛋糕网上商城的设计与实现为例,包含答辩的问题和答案
java·开发语言
智能零售小白白1 小时前
零售多门店库存调拨优化:需求预测与路径规划的技术实现
java·开发语言·零售